Estoy escribiendo un programa C que se espera que sea compilado con todos los compiladores. Actualmente estoy desarrollando en GCC en una máquina Linux y compilaré en MSVC antes de comprometer el código. Para facilitar la compilación cruzada, estoy compilando con los indicadores -ansi
y -pedantic
. Esto funcionó bien hasta que comencé a usar snprintf
que no está disponible en el estándar C89. GCC puede compilar esto sin el modificador -ansi
pero MSVC fallará siempre ya que no tiene soporte C99.snprintf en una aplicación multiplataforma
por lo que hice algo así,
#ifdef WIN32
#define snprintf sprintf_s
#endif
Esto funciona bien porque snprintf
y tiene sprintf_s
mismas firmas. Me pregunto si este es el enfoque correcto.
no es el estándar 'snprintf' para todas las C en cualquier plataforma? –
no. 'snprintf' es parte del estándar C99. MSVC no tiene una implementación C99. –
'sprintf_s' no es equivalente. 'snprintf' devuelve el número de caracteres que se han escrito, mientras' sprintf_s' devuelve -1 en el truncamiento. Ver [este debate] (http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/2b339bdf-7ab1-4a08-bf7e-e9293801455b/). –