Re: localtime deprecated?
lists@givemefish.com wrote:
while compiling an existing project in the new MSVC 2005
compiler, I received the warning that:
: warning C4996: 'localtime' was declared deprecated
C:\Program Files\Microsoft Visual Studio
8\VC\include\time.inl(114) : see declaration of 'localtime'
Message: 'This function or variable may be unsafe. Consider
using localtime_s instead. To disable deprecation, use
_CRT_SECURE_NO_DEPRECATE. See online help for details.'
I wasn't aware that localtime was declared deprecated. Is
this true?
Not by the C++ committee, nor by the C committee (I think).
Maybe by Microsoft. In fact, the message is misleading; I think
Microsoft has admitted this, and plans to change it in the next
release.
On the other hand, there are cases where localetime might be
unsafe -- it cannot be used in multithreaded code, for example.
And this fact was recognized and addressed by the C committee.
Except for the word "deprecated" itself, the Microsoft warning
pretty much corresponds to what the C committee has said.
And, if so, is the suggestion of localtime_s standard compliant?
Not in the strictest sense. It is defined in a TR to C -- sort
of an official extension. Practically speaking, I would expect
most C compilers to gradually move to support it, much as C++
compilers try to support TR1 (except that a lot of C compilers
aren't moving, period). If the C compiler supports it, you will
likely get it automatically in C++, even if C++ doesn't (yet)
recognize the C TR.
For the moment, however, most C compilers, much less most C++
compilers, do not support it. (The copy of it that I have
access to is dated Sept. 9, 2005, and it is only a draft. So
it is very, very new.)
If not, what should I use? [This program has to be
platform-independent, ISO C++.]
I'm not sure what the C++ committee's position is with regards
to this TR -- given how new it is, I doubt that the C++
committee has even considered it. Practically speaking, you
can't use anything in it in portable code. Yet.
I might add that I just love the fact that we now have three
"standard" functions to do exactly the same thing: localtime
(which, however, cannot be used in a multithreaded environment),
localtime_r (from Posix, to support multithreaded environments),
and localtime_s (the C committee's answer to the problem).
--
James Kanze GABI Software
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]