#undef指令

 

#undef指令
(转: http://www.neu.edu.cn/cxsj/pointchart/c11/.undef.html)

 

TAG: 预编译和宏定义,ANSI C,取消符号常量定义命令
TEXT:
取消符号常量定义命令,语法形式如下:
#undef 符号常量名称(或编译标志)
其作用取消最近一次#define符号常量名称(或编译标志)命令,使定义的符号常量或编译标志失效。
例11-3 分析如下的代码
#include "stdio.h"
void Test();
int main(int argc, char* argv[])
{
#define CONST_NAME1 "CONST_NAME1"
printf("%s/n",CONST_NAME1);
#undef CONST_NAME1
printf("%s/n",CONST_NAME1); /* 错误,CONST_NAME1的定义已经取消*/
{
#define CONST_NAME2 "CONST_NAME2"
printf("%s/n",CONST_NAME2);
}
printf("%s/n",CONST_NAME2);
return 0;
}
void Test()
{
printf("%s/n",CONST_NAME2);
}
在程序的编译的时候,系统提示如下信息
error C2065: 'CONST_NAME1' : undeclared identifier
出现上述编译错误的原因是,在第二次应用符号常量CONST_NAME1时,此符号常量已经被取消定义。
符号常量的有效范围是从第一次出现的位置开始,到#undef结束。如果没有对应的#undef指令,则到文件末尾结束。因此在本例中void Test函数可以直接使用CONST_NAME2,而无须定义。
提示 符号常量与变量的有效范围不同。变量根据其所在位置,例如某函数或文件决定其有效性,在函数内部定义的变量不能够为其他的函数所使用。但是符号常量仅仅与其出现先后位置,以及对应的#undef命令相关,与是否出现在具体函数无关。

你可能感兴趣的:(c)