ошибка: использование необъявленного идентификатора 'errno_t'
Вот мой мертвый простой фиктивный код:
#include <errno.h>
int main(void)
{
errno_t e;
return 0;
}
Что удивительно вызывает эту ошибку:
main.c:5:5: error: use of undeclared identifier 'errno_t'
errno_t x;
^
Я началследовать по следам: когда компилятор видит<...>
включения это будет сначала смотреть на/usr/include
где я конечно нашелerrno.h
файл. На самом деле он содержит одну строку, помимо комментария лицензии, которая:
#include <sys/errno.h>
Сейчас на/usr/include/sys
вerrno.h
Я нашел следующие строки:
#include <sys/cdefs.h>
#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1
#include <sys/_types/_errno_t.h>
#endif
И в/usr/include/_types
в_errno_t.h
Я нашел это:
typedef int errno_t;
Таким образом, похоже, что он есть, и это псевдоним целочисленного типа, и частьerrno.h
- так и должно быть.
Тогда почему это не включено? Почему компилятор вызывает ошибку необъявленного идентификатора?
Заранее спасибо!
СООТВЕТСТВУЮЩАЯ ИНФОРМАЦИЯ:
Compiler:
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)`
Compiler flags:
-std=c11 -I/usr/include/sys -I/usr/local/include
Макропеременная__STDC_WANT_LIB_EXT1__
будет определен в/usr/include/sys
вcdefs.h
в следующих строках:
/* If the developer has neither requested a strict language mode nor a version
* of POSIX, turn on functionality provided by __STDC_WANT_LIB_EXT1__ as part
* of __DARWIN_C_FULL.
*/
#if !defined(__STDC_WANT_LIB_EXT1__) && !defined(__STRICT_ANSI__) && __DARWIN_C_LEVEL >= __DARWIN_C_FULL
#define __STDC_WANT_LIB_EXT1__ 1
#endif
ОБНОВИТЬ:
Как сказал @PaulR в разделе комментариев: если я удалю-std=c11
флаг, он компилируется. Что столь же удивительно, как и ошибка, возникающая при включении флага. Поэтому я расширяю этот вопрос подвопросом:
Не являетсяerrno_t
часть стандарта C11, или почему он не включен, когда стандарт указан для компилятора?