【发布时间】:2020-07-11 11:51:16
【问题描述】:
我正在挖掘一些 C 内部结构,并从 clang 的 stddef.h(位于 /usr/lib/llvm-11/lib/clang/11.0.0/include/)中找到以下行:
typedef __WCHAR_TYPE__ wchar_t;
这与我在 gcc 的stddef.h(位于/usr/lib/gcc/x86_64-pc-linux-gnu/10.0.1/include/)中找到的不同:
#ifndef __WCHAR_TYPE__
#define __WCHAR_TYPE__ int
#endif
#ifndef __cplusplus
typedef __WCHAR_TYPE__ wchar_t;
#endif
在 gcc 的 stddef.h 中,__WCHAR_TYPE__ 被明确定义为 int,但在 clang 的 stddef.h 中,除了那一行之外,在任何地方都没有提到 __WCHAR_TYPE__。所以,我决定自己定义宏,以便找出宏是在哪里定义的。我用clang编译了以下文件:
#define __WCHAR_TYPE__ x
而且,我收到以下警告:
file.c:1:9: warning: '__WCHAR_TYPE__' macro redefined [-Wmacro-redefined]
#define __WCHAR_TYPE__ x
^
<built-in>:85:9: note: previous definition is here
#define __WCHAR_TYPE__ int
似乎有某种“内置”标头定义了__WCHAR_TYPE__ 宏,并且根据提供的行号这一事实判断,该标头似乎是一个实际文件。但是,我在/usr 中递归地搜索#define __WCHAR_TYPE__ int,并且在gcc 的头文件之外找不到任何东西。所以,我的问题是,这个“内置”头文件是不是一个实际的文件,如果是,我在哪里可以找到它?
【问题讨论】:
-
您是否尝试过您的 IDE 的“转到定义”?
-
@bolov 我觉得这在这种特殊情况下行不通。