В мире Standard C тип 'errno_t
' определяется TR24731-1 (см. Используете ли вы функции TR 24731 «safe»? для получения дополнительной информации), и вам необходимо «активировать его», определив «__STDC_WANT_LIB_EXT1__
».
Однако вы, похоже, работаете в Windows (судя по «tail.exe», а также нестандартному «_get_errno()
»). Правила могут зависеть от того, какой компилятор C вы используете.
Вы сможете найти информацию из этой статьи MSDN о «Улучшения безопасности в CRT ». У меня сложилось впечатление, что оно должно быть определено, если вы активно не подавляете эту функцию, поэтому проверьте, активно ли вы ее подавляете в своих сборниках.
Имейте в виду, что определения функций MSVC, такие как vsnprintf_s()
, не соответствуют определениям TR24731-1:
MSDN:
int vsnprintf_s(
char *buffer,
size_t sizeOfBuffer,
size_t count,
const char *format,
va_list argptr
);
TR 24731-1:
int vsnprintf_s(
char * restrict s,
rsize_t n,
const char * restrict format,
va_list arg
);
Разница не только в псевдонимах или квалификаторах типов (rsize_t
, restrict
) - в версии MS есть два размера, а в стандартной версии - один. Так много для стандартизации!