Sto scrivendo un programma C che dovrebbe essere compilato con tutti i principali compilatori. Attualmente sto sviluppando su GCC su una macchina Linux e compilerò su MSVC prima di eseguire il codice. Per semplificare la compilazione incrociata, compilo con le bandiere -ansi
e -pedantic
. Questo ha funzionato bene fino a quando ho iniziato a utilizzare snprintf
che non è disponibile nello standard C89. GCC può compilare questo senza lo switch ma MSVC fallirà sempre in quanto non ha il supporto C99.Utilizzo di snprintf in un'applicazione multipiattaforma
Così ho fatto qualcosa di simile,
#ifdef WIN32
#define snprintf sprintf_s
#endif
Questo funziona bene perché snprintf
e sprintf_s
ha le stesse firme. Mi chiedo se questo è l'approccio corretto?
non è lo standard 'snprintf' per tutti i C in qualsiasi piattaforma? –
no. 'snprintf' fa parte dello standard C99. MSVC non ha un'implementazione C99. –
'sprintf_s' non è equivalente. 'snprintf' restituisce il numero di caratteri che sarebbero stati scritti, mentre' sprintf_s' restituisce -1 sul troncamento. Vedi [questa discussione] (http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/2b339bdf-7ab1-4a08-bf7e-e9293801455b/). –