Я копался в некоторых C внутренних органах и нашел следующую строку из stddef.h
clang (расположенной в /usr/lib/llvm-11/lib/clang/11.0.0/include/
):
typedef __WCHAR_TYPE__ wchar_t;
Это отличается от того, что я нашел в g cc s 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
В g cc s stddef.h
, __WCHAR_TYPE__
четко определяется как int
, но в кланге 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
в /usr
и не смог найти ничего, кроме заголовочных файлов g cc. Итак, мой вопрос, является ли этот «встроенный» заголовочный файл реальным файлом, и если да, где я могу его найти?