C/C++ #define的作用域

匿名 (未验证) 提交于 2019-12-02 23:49:02

#define

#define macro的作用域有点类似于C/C++全局静态变量  编译器处理宏的时机是预处理阶段 编译器按文本顺序处理 遇到宏时就定义一个宏变量  假设这种情况  void test() { #define MACRO 1 }  int main() { #ifdef MACRO // do some thing #endif } main函数也是看得到MACRO宏的 因为文本顺序上test在前 编译器处理到test时定义了一个宏变量 使得main也能“看见“这个宏  假如把顺序交换 int main() { #ifdef MACRO // do some thing #endif }  void test() { #define MACRO 1 } main就看不见MACRO宏了

不同源文件中的宏

不同源文件是看不到互相定义的宏的 除非将宏定义在了头文件中  宏的机制类似于全局变量 一般情况不会暴露给另一个源文件 除非你特意在头文件中暴露了它  #a.c #define CX 1  #b.c int main() { #ifdef CX //不会被执行 因为看不到这个宏 #endif }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!