Where is stdarg.h?
On my system (Mac OS 10.6) /usr/include/stdarg.h is:
/* This file is public domain. */
/* G开发者_StackOverflowCC 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
So, if GCC uses its own copy of stdarg.h, where is it? I have no idea on what
that #include_next
means (maybe a GCC extension?), nor something about
"MWERKS" (a compiler?).
<stdarg.h>
, even more than most C library headers, tends to be very compiler-specific. As such, each of the compilers on OS X has it's own stdarg.h
implementation, found in a compiler-specific location (which is included as part of the default search paths for that compiler). The compiler finds the generic stdarg.h
, which basically tells it to "keep looking" (via the extension #include_next
), and it then finds the compiler-specific implementation.
__MWERKS__
refers to an old compiler for PPC, "MetroWerks CodeWarrior".
#include_next
is a gcc extension. As you should know, #include
has a list of paths it searches for header files. #include_next
tells the preprocessor to include the specified header checking only paths in the list after the one that contained the current header file.
__MWERKS__
is a preprocessor macro defined on old versions of CodeWarrior.
精彩评论