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