Ich schreibe ein C-Programm, das mit allen wichtigen Compilern kompiliert werden soll. Derzeit entwickle ich GCC auf einem Linux-Rechner und kompiliere auf MSVC, bevor ich den Code beginne. Um das Cross-Compilieren zu erleichtern, kompiliere ich mit -ansi
und -pedantic
Flags. Dies funktionierte gut, bis ich anfing, snprintf
zu verwenden, das in C89 Standard nicht verfügbar ist. GCC kann das ohne den -ansi
Schalter kompilieren aber MSVC wird immer fehlschlagen, da es C99 Unterstützung nicht unterstützt.Verwendung von snprintf in einer plattformübergreifenden Anwendung
Also habe ich so etwas wie,
#ifdef WIN32
#define snprintf sprintf_s
#endif
Das funktioniert gut, weil snprintf
und sprintf_s
gleiche Unterschriften haben. Ich frage mich, ist das der richtige Ansatz?
ist nicht "snprintf" Standard für alle C in jeder Plattform? –
nein. 'snprintf' ist Teil des C99-Standards. MSVC hat keine C99-Implementierung. –
'sprintf_s' ist nicht gleichwertig. 'snprintf' gibt die Anzahl der Zeichen zurück, die geschrieben worden wären, während' sprintf_s' -1 beim Abschneiden zurückgibt. Siehe [diese Diskussion] (http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/2b339bdf-7ab1-4a08-bf7e-e9293801455b/). –