stdarg.h在哪里?

时间:2011-07-15 19:57:36

标签: c macos gcc freebsd libc

在我的系统上(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”(编译器?)。

2 个答案:

答案 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上定义的预处理器宏。