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