C语言 多个 #ifndef 语句 - 应用哪一个语句



假设我有五个文件:main.c, sample1.c, sample1.h, sample2.csample2.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_PRINTS1

否则,宏仅对此文件或标头可见。

最新更新