这个问题是为了理解头文件包含的标准行为(不是在我的编译器上实现的行为)。
我有两个同名的头文件(但内容不同):

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

假设两个头包含相同的多个包含前置宏
#ifndef MYHEADER
#define MYHEADER
...
#endif

我有c文件/private/test.c,其中包括上述两个头:
#include <myheader.h>  // Includes from standard system folder
#include "myheader.h"  // Includes from the folder where test.c is present

由于每个myheader定义都有单独的名称空间,所以两个文件中的内容在预处理时是否都进入c文件?或者第二个包含将被阻止,因为myheader已经在同一个命名空间中定义了?

最佳答案

N1570
6.10.3宏替换

7紧跟在define后面的标识符称为宏名。有一个
宏名称的名称空间。在
预处理令牌的替换列表不被视为任何形式宏的替换列表的一部分。
强调我的。
在编写时,只会处理第一个myheader.h文件的内容。

08-17 03:46