假设我有五个文件: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
关键字相同?
答案 0 :(得分:1)
#ifndef
表示在您包含的标头之前或之中,该文件中是否未定义宏。在您的情况下,它默认为0.
如果您将该文件中的DEBUG_PRINTS
更改为1
,则会覆盖在头文件中找到的#define
中的#ifndef
。您基本上是在本地定义或覆盖导入的头文件中的默认DEBUG_PRINTS
到1
。
否则,宏仅对此文件或标题可见。