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

时间:2018-05-13 01:48:35

标签: c gcc 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关键字相同?

1 个答案:

答案 0 :(得分:1)

#ifndef表示在您包含的标头之前或之中,该文件中是否未定义宏。在您的情况下,它默认为0.

如果您将该文件中的DEBUG_PRINTS更改为1,则会覆盖在头文件中找到的#define中的#ifndef。您基本上是在本地定义或覆盖导入的头文件中的默认DEBUG_PRINTS1

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