В моей системе (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 .