我正在研究一些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__
宏的“内置”标头,并且从提供行号的事实来看,该标头似乎是实际文件。但是,我递归地查找了#define __WCHAR_TYPE__ int
in,/usr
并且在gcc的头文件之外找不到任何东西。因此,我的问题是,此“内置”头文件是否为实际文件,如果是,我在哪里可以找到它?
这不是实际文件;clang内置了许多预定义的宏。
您可以通过在clang -dM -E foo.c
哪里找到foo.c
任何文件(甚至可以为空)来查看所有这些宏。我看到的清单中
#define __WCHAR_TYPE__ int
在clang源代码中,所有操作都在中完成clang/lib/Frontend/InitPreprocessor.cpp
。
gcc实际上也有它(run gcc -dM -E foo.c
;clang
并且gcc
大多支持相同的命令行选项)。该#define
中<stddef.h>
可能只是有作为备份。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句