gpt4 book ai didi

c - clang 头文件在哪里?

转载 作者:行者123 更新时间:2023-12-03 08:47:10 26 4
gpt4 key购买 nike

我正在深入研究一些 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

似乎有某种“内置” header 定义了 __WCHAR_TYPE__ 宏,并且从行号为假如。但是,我在 /usr 中递归地查找 #define __WCHAR_TYPE__ int ,但在 gcc 头文件之外找不到任何内容。所以,我的问题是,这个“内置”头文件是一个实际的文件吗?如果是,我在哪里可以找到它?

最佳答案

这不是一个实际的文件; clang 内置了许多预定义的宏。

您可以通过执行clang -dM -E foo.c来查看所有这些宏。哪里foo.c是任何文件(甚至可以是空的)。在我看到的列表中

#define __WCHAR_TYPE__ int

在 clang 源中,这一切都是在 clang/lib/Frontend/InitPreprocessor.cpp 中完成的.

gcc 实际上也有它(运行 gcc -dM -E foo.cclanggcc 大多数支持相同的命令行选项)。 #define<stddef.h>可能只是作为备份。

关于c - clang <built-in> 头文件在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60941935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com