¿Cómo #ifdef por CompilerType? GCC o VC ++

Utilicé #ifdef Win32 para llamadas seguras como sprintf_s pero ahora quiero crear un proyecto con MinGW y ahora está mal. Necesito usar #ifdef VC++ o de alguna manera así. ¿Es posible?

Consulte la tabla “Macros predefinidas específicas de Microsoft” de macros predefinidas de Visual C

Puede comprobar _MSC_VER .

 #ifdef __GNUC__ /*code for GNU C compiler */ #elif _MSC_VER /*usually has the version number in _MSC_VER*/ /*code specific to MSVC compiler*/ #elif __BORLANDC__ /*code specific to borland compilers*/ #elif __MINGW32__ /*code specific to mingw compilers*/ #endif 

Preferiblemente, deberías recurrir al uso de símbolos portátiles. Entiendo que a veces esos símbolos pueden no estar definidos, por lo que puede ver el proyecto de Predef para una lista extensa de macros de preprocesador con respecto a estándares, comstackdores, bibliotecas, sistemas operativos y architectures que no son portátiles.

Sin embargo, la función que menciona específicamente en esta pregunta se ha incluido dentro del estándar C11 como parte del Anexo K.3, las interfaces de verificación de límites (biblioteca) .

K.3.1.1p2 estados:

Las funciones, macros y tipos declarados o definidos en K.3 y sus subcláusulas están declarados y definidos por sus respectivos encabezados si __STDC_WANT_LIB_EXT1__ se define como una macro que se expande a la constante entera 1 en el punto del archivo fuente donde se encuentra el encabezado apropiado se incluye primero

Por lo tanto, debe colocar una preferencia al marcar __STDC_WANT_LIB_EXT1__ , y solo usar símbolos específicos del comstackdor cuando no exista.