多个 #ifndef 语句 - 应用哪一个
Multiple #ifndef statements - which one gets applied
假设我有五个文件: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
表示如果宏 根本没有定义 在您包含的文件之前或 header 中。在您的情况下,它默认为 0。
如果您将那个文件中的 DEBUG_PRINTS
更改为 1
,它将覆盖 header 文件中 #ifndef
中的 #define
。您基本上是在本地将导入的 header 文件中的默认值 DEBUG_PRINTS
定义或覆盖为 1
.
否则,宏仅对该文件可见或header。
每个文件都是单独编译的。一个文件中的宏在任何其他文件中都不可见。独立编译文件后,将生成的对象链接在一起以创建可执行文件。
假设我有五个文件: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
表示如果宏 根本没有定义 在您包含的文件之前或 header 中。在您的情况下,它默认为 0。
如果您将那个文件中的 DEBUG_PRINTS
更改为 1
,它将覆盖 header 文件中 #ifndef
中的 #define
。您基本上是在本地将导入的 header 文件中的默认值 DEBUG_PRINTS
定义或覆盖为 1
.
否则,宏仅对该文件可见或header。
每个文件都是单独编译的。一个文件中的宏在任何其他文件中都不可见。独立编译文件后,将生成的对象链接在一起以创建可执行文件。