Так как беглый поиск в гугле ничего не нашел, попробую спросить здесь (поскольку здесь ошивается много людей, занимающихся gcc/clang) - Каков статус __STDC_LIB_EXT1__
в gcc/clang? Мы разрабатываем кроссплатформенное приложение, и я хотел использовать некоторые функции проверки безопасных границ из <stdio.h>
(которые чудом доступны в Visual Studio 2017), но не смог скомпилировать код с Xcode 9.2. Я предположил, что версия clang, которую использует Xcode, устарела, но gcc 6.3.0 в Ubuntu ведет себя так же. Я пытаюсь использовать tmpnam_s со следующим примером:
#if defined(__STDC_LIB_EXT1__)
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#else
#error "__STDC_LIB_EXT1__ not defined"
#endif
int main(int argc, char** argv)
{
char t[L_tmpnam_s];
tmpnam_s(t, L_tmpnam_s);
return 0;
}
Но компиляция завершается ошибкой, макрос не определен:
gcc -std=c11 test.c
test.c:5:2: error: #error "__STDC_LIB_EXT1__ not defined"
#error "__STDC_LIB_EXT1__ not defined"
^~~~~
Я что-то не так делаю или этот набор функций просто плохо поддерживается?
-D_FORTIFY_SOURCE=2
. Это намного проще, потому что компиляция сделает всю работу за вас. blog.quarkslab.com/clang-hardening-cheat-sheet.html - person Stargateur   schedule 18.12.2017