当前位置:嗨网首页>书籍在线阅读

16-从C预处理器角度看已定义

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

16.6.2 从C预处理器角度看已定义

预处理器在识别标识符时,遵循与C相同的规则:标识符可以由大写字母、小写字母、数字和下划线字符组成,且首字符不能是数字。当预处理器在预处理器指令中发现一个标识符时,它会把该标识符当作已定义的或未定义的。这里的已定义表示由预处理器定义。如果标识符是同一个文件中由前面的 #define 指令创建的宏名,而且没有用 #undef 指令关闭,那么该标识符是已定义的。如果标识符不是宏,假设是一个文件作用域的C变量,那么该标识符对预处理器而言就是未定义的。

已定义宏可以是对象宏,包括空宏或类函数宏:

#define LIMIT 1000         // LIMIT是已定义的
#define GOOD             // GOOD 是已定义的
#define A(X) ((-(X))*(X))  // A 是已定义的
int q;                  // q 不是宏,因此是未定义的
#undef GOOD              // GOOD 取消定义,是未定义的

注意, #define 宏的作用域从它在文件中的声明处开始,直到用 #undef 指令取消宏为止,或延伸至文件尾(以二者中先满足的条件作为宏作用域的结束)。另外还要注意,如果宏通过头文件引入,那么 #define 在文件中的位置取决于 #include 指令的位置。

稍后将介绍几个预定义宏,如 __DATE____FILE__ 。这些宏一定是已定义的,而且不能取消定义。