假设我有五个文件:main.c, sample1.c, sample1.h, sample2.c
和sample2.h
,其中每个文件中DEBUG_PRINTS
定义如下:
#ifndef DEBUG_PRINTS
#define DEBUG_PRINTS 0
#endif
代码是使用 gcc 编译的:
gcc -Wall main.c sample1.c sample2.c -o main
现在我将一个文件中DEBUG_PRINTS
的值更改为1
。如果不打印到终端,您如何确定将应用哪个值?
此外,如何为每个文件本地定义DEBUG_PRINTS
- 与对变量使用static
关键字相同?
每个文件都是单独编译的。一个文件中的宏在任何其他文件中都不可见。独立编译文件后,生成的对象将链接在一起以创建可执行文件。
#ifndef
表示宏是否在您包含的标头之前或标头中根本没有在该文件中定义。在您的情况下,它默认为 0。
如果将该文件中的DEBUG_PRINTS
更改为1
,它将覆盖头文件中#ifndef
中找到的该#define
。您基本上在本地定义或覆盖导入的头文件中的默认DEBUG_PRINTS
以1
。
否则,宏仅对此文件或标头可见。