Aviso C4996: Esta função ou variável pode não ser segura - em comparação com o GCC no POSIX
Percebo que os compiladores MS emitem avisos "obsoletos" paracstdlib
funções comogetenv
. A MS inventou seu próprio padrão, como_dupenv_s
.
AFAIK, a principal coisa "insegura" é sobre reentrada *. Como o CRT da MS está marcado como "multiencadeado" (/MT
), por que eles não substituemgetenv
com a versão reentrante e segura para threads? É como se alguém dependesse de um comportamento inseguro?
Eu compilei o mesmo código com o GCCg++ -Wall -Wextra -Weff++ -pedantic foo.cpp
e não gera nenhum aviso. Então eu acho que isso não é um problema no POSIX? Como isso é resolvido? (OK, talvez eles tenham mudado o comportamento degetenv
, seria bom ter isso confirmado).
* É uma generalização excessiva dizer que é apenas uma questão de reentrada. Claro que temos coisas comostrncpy_s
que altera completamente a assinatura e lida com o tamanho do buffer. Mas não muda o cerne desta questão