¿Dónde están las macros de características opcionales de C11?

En el estándar C11 está escrito que los comstackdores deben proporcionar algunas macros para probar la presencia de características opcionales. ¿En qué encabezados los encuentro?

Por ejemplo, ¿dónde está ubicado __STDC_NO_VLA__ ?

Con GCC, es decir, si bash encontrar __STDC_NO_COMPLEX__ en __STDC_NO_COMPLEX__ no lo encuentro allí …

No están definidos en ningún encabezado, un comstackdor los definirá ellos mismos.

Puedes volcar todas las definiciones del preprocesador. Por ejemplo para gcc write:

 gcc -dM -E - < /dev/null 

Por ejemplo para mí:

 bob@bob-fedora:~/trunk/software$ gcc --version gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. bob@bob-fedora:~/trunk/software$ gcc -std=gnu11 -dM -E - < /dev/null | grep STDC #define __STDC_HOSTED__ 1 #define __STDC_UTF_16__ 1 #define __STDC_VERSION__ 201112L #define __GNUC_STDC_INLINE__ 1 #define __STDC_UTF_32__ 1 #define __STDC__ 1 

En el ejemplo que dio, __STDC_NO_VLA__ , la presencia de esto significa que el comstackdor no admite matrices de longitud variable. Podrías escribir:

 #ifdef __STDC_NO_VLA__ #error Your compiler does not support VLAs! Please use a supported compiler. #endif 

O

 #ifndef __STDC_NO_VLA__ // code using variable length arrays #else // fallback code for when they are not supported #endif 

Si se define STDC_NO_COMPLEX , indica que no hay ningún complejo.h

STDC_NO_COMPLEX está definido por el comstackdor, no por el archivo de encabezado

fuente: http://en.cppreference.com/w/c/numeric/complex