Der Grund liegt nämlich daran, dass "
localtime" nur auf der Windows-Plattform threadsicher ist und threadlokalen Speicher nutzt. (
Siehe MSDN bei "Remarks") Auf Linux hingegen ist die Funktion explizit nicht threadsicher und liegt nicht im Thread lokalen Speicher, was zu sehr schwer zu findenden Bugs führen kann. (Siehe
Linux mal page bei "Notes")
Inwiefern schränkt das die Portabilität von
localtime() ein?
Ich bin auch kein Fan von Funktionen,
die internen, globalen Zustand modifizieren oder gar nach außen reichen (
strtok() wäre ein weiteres Beispiel, einige andere Dinge, wie z.B.
errno, sind mittlerweile offenbar garantiert threadlocal). Aber die Aussage, dass durch nicht garantierte Threadsafety die Portabilität in irgendeiner Weise eingeschränkt oder gar die Nutzung der Funktion rein prinzipiell "unsicher" würde, ist falsch, insbesondere, da der Threadersteller sicherlich nicht vorhat,
localtime() aus mehreren Threads parallel aufzurufen (ka wieso überhaupt jemand sowas würde machen wollen)...
PS: So wie's aussieht, wurden einige der *_s Funktionen (
localtime_s() inklusive) mittlerweile in den C-Standard aufgenommen...