Я заметил, что компиляторы MS выдают "устаревшие" предупреждения для функций cstdlib
, таких как getenv
. MS изобрела свой собственный стандарт, такой как _dupenv_s
.
Насколько мне известно, основная "небезопасная" вещь связана с повторным входом *. Поскольку MS ' s CRT помечен как «многопоточный» ( / MT
), почему бы просто не заменить getenv
реентерабельной, поточно-ориентированной версией? Может быть, кто-то будет зависеть от небезопасного поведения?
Я скомпилировал тот же код с GCC g ++ -Wall -Wextra -Weff ++ -pedantic foo.cpp
, и он не дает никаких предупреждений. Полагаю, это не проблема POSIX? Как это решается? (Хорошо, может быть, они просто изменили поведение getenv
, было бы неплохо, если бы это подтвердилось.)
* Сказать, что речь идет только о повторном вхождении, является чрезмерным обобщением. Конечно, у нас есть такие вещи, как strncpy_s
, который полностью меняет подпись и имеет дело с размером буфера. Но не t изменить суть этого вопроса