Где stdarg.h?

В моей системе (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  #elif defined(__MWERKS__) #include "mw_stdarg.h" #else #error "This header only supports __MWERKS__." #endif 

Итак, если GCC использует свою собственную копию stdarg.h , где это? Я понятия не имею, что означает этот #include_next (возможно, расширение GCC?), Или что-то вроде «MWERKS» (компилятор?).

, даже больше, чем большинство заголовков библиотеки C, имеет тенденцию быть очень специфичным для компилятора. Таким образом, каждый из компиляторов OS X имеет собственную реализацию stdarg.h , которая находится в определенном компилятором месте (которое включено как часть путей поиска по умолчанию для этого компилятора). Компилятор находит общий stdarg.h , который в основном говорит ему «продолжать искать» (через расширение #include_next ), а затем находит реализацию, специфичную для компилятора.

__MWERKS__ ссылается на старый компилятор для PPC, «MetroWerks CodeWarrior».

#include_next – расширение gcc. Как вы должны знать, #include имеет список путей, в которых он ищет файлы заголовков. #include_next сообщает препроцессору включить указанный заголовок, проверяющий только пути в списке после того, который содержит текущий файл заголовка.

__MWERKS__ – макрос препроцессора, определенный в старых версиях CodeWarrior .