1

假设我有五个文件: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关键字的变量相同?

4

2 回答 2

4

每个文件都是单独编译的。一个文件中的宏在任何其他文件中都不可见。独立编译文件后,生成的对象将链接在一起以创建可执行文件。

于 2018-05-13T02:23:16.437 回答
1

#ifndef表示如果宏在您包含的文件之前或在您包含的标题中根本没有定义。在您的情况下,它默认为 0。

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

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

于 2018-05-13T01:58:09.583 回答