ошибка: использование необъявленного идентификатора '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, или почему он не включен, когда стандарт указан для компилятора?

Ответы на вопрос(1)

Ваш ответ на вопрос