Где находится stdarg.h? - PullRequest
       30

Где находится stdarg.h?

10 голосов
/ 15 июля 2011

В моей системе (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.ч , где это?Я понятия не имею, что означает #include_next (может быть, расширение GCC?), И что-то насчет "MWERKS" (компилятор?).

Ответы [ 2 ]

6 голосов
/ 16 июля 2011

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

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

3 голосов
/ 16 июля 2011

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

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

...