c - #include 预处理器宏 namespace

标签 c linux gcc

这个问题是为了理解包含头文件的标准行为(不是在我的编译器上实现的行为)。

我有两个同名的头文件(但内容不同):

1) /user/include/myheader.h  # In standard system folder
2) /private/myheader.h       # In my private folder

假设两个 header 都包含相同的多个包含预防宏

#ifndef MYHEADER
#define MYHEADER
...
#endif

我有 C 文件 /private/test.c,其中包括上述两个 header :

#include <myheader.h>  // Includes from standard system folder
#include "myheader.h"  // Includes from the folder where test.c is present

由于每个 MYHEADER 定义都有单独的 namespace ,因此在预处理时是否将两个文件的内容都放入 C 文件中?或者第二次包含将被阻止,因为 MYHEADER 已经在同一个命名空间中定义?

最佳答案

所有宏只有一个命名空间,所有宏都在同一个命名空间中。将内容放在不同的头文件中对此没有影响——它们仍然在同一个命名空间中。因此,对于您的示例,第一个 header 将定义 MYHEADER,这将导致(有效地)忽略第二个 header 。

关于c - #include 预处理器宏 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500350/

相关文章:

C strncpy 没有空终止的原因

c++ - 什么是 C++ 应用程序的最佳多线程应用程序调试器

linux - 如何使用 libpcap 实现 tcpdump -i interface arp

c++ - __FLT_MAX__ 和 __DBL_MAX__ 为 0?

c - 了解 C 中数据 bss 段的大小命令

c - 为什么只有少量线程启动?

c - C 中 realloc() 函数的有效性

c - 为什么在编译时声明时数组大小受到限制?

linux - if 语句中的 cmp (Bash)

java - undefined symbol 错误