Предупреждение C4996: Эта функция или переменная может быть небезопасной - по сравнению с GCC в POSIX

Я заметил, что компиляторы MS выдают "устаревшие" предупреждения для функций cstdlib , таких как getenv . MS изобрела свой собственный стандарт, такой как _dupenv_s .

Вопрос 1

Насколько мне известно, основная "небезопасная" вещь связана с повторным входом *. Поскольку MS ' s CRT помечен как «многопоточный» ( / MT ), почему бы просто не заменить getenv реентерабельной, поточно-ориентированной версией? Может быть, кто-то будет зависеть от небезопасного поведения?

Вопрос 2

Я скомпилировал тот же код с GCC g ++ -Wall -Wextra -Weff ++ -pedantic foo.cpp , и он не дает никаких предупреждений. Полагаю, это не проблема POSIX? Как это решается? (Хорошо, может быть, они просто изменили поведение getenv , было бы неплохо, если бы это подтвердилось.)

* Сказать, что речь идет только о повторном вхождении, является чрезмерным обобщением. Конечно, у нас есть такие вещи, как strncpy_s , который полностью меняет подпись и имеет дело с размером буфера. Но не t изменить суть этого вопроса

20
задан kizzx2 26 November 2010 в 16:37
поделиться