在我的系统上(Mac OS 10.6) /usr/include/stdarg.h 是:
/* This file is public domain. */
/* GCC uses its own copy of this header */
#if defined(__GNUC__)
#include_next <stdarg.h>
#elif defined(__MWERKS__)
#include "mw_stdarg.h"
#else
#error "This header only supports __MWERKS__."
#endif
那么,如果GCC使用自己的 stdarg.h 副本,它在哪里?我什么都不知道
#include_next
表示(可能是GCC扩展?),也不是
“MWERKS”(编译器?)。
答案 0 :(得分:6)
<stdarg.h>
,甚至超过大多数C库头,往往是特定于编译器的。因此,OS X上的每个编译器都有自己的stdarg.h
实现,可以在特定于编译器的位置找到(它包含在该编译器的默认搜索路径中)。编译器找到通用stdarg.h
,它基本上告诉它“继续查找”(通过扩展#include_next
),然后它找到特定于编译器的实现。
__MWERKS__
指的是PPC的旧编译器,“MetroWerks CodeWarrior”。
答案 1 :(得分:3)
#include_next
是gcc扩展程序。如您所知,#include
有一个搜索头文件的路径列表。 #include_next
告诉预处理器在包含当前头文件的路径之后,在列表中包含仅检查路径的指定头。
__MWERKS__
是在旧版CodeWarrior上定义的预处理器宏。