MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Поддерживается ли функция localtime_s в трансляторе GCC?"
Answer 775831
В современных версиях Visual C++ CRT функция
localtime
(как большинство других подобных функций) не имеет проблем с доступом из разных потоков: используемый буфер не является настоящей статической переменной, а размещен на самом деле в локальном хранилище потока. Это не значит, что хорошо ее использовать - это просто очень неудачно спроектированный API, с которым легко допустить ошибки. Но таких в С/С++ много, это ни о чем не говорит.Насколько я знаю, студия на такие функции дает предупреждение, а не ошибку. Вероятно, у вас включена опция компилятора "обрабатывать предупреждения как ошибки". Вы можете отключить предупреждение директивой
#pragma warning(disable : 4996)
, если у вас хватит дисциплины при этом не использовать действительно небезопасные функции из CRT, вродеstrcpy
. Либо переписывать код с использованием безопасных функций, доступных в конкретных компиляторах.Что касается
localtime_s
, она введена в стандарте С11, который считается "экзотикой", и не все реализации в полной мере его поддерживают. В С++11 ее нету. GLIBC (аналог CRT в GCC) содержит вместо нееlocaltime_r
из POSIX. Чтобы писать код, который будет обрабатываться разными компиляторами, придется воспользоваться условными директивами препроцессора и написать разные ветки кода для разных компиляторов. Иначе никак.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.