¿Qué características de C99 están disponibles en el comstackdor de MS Visual Studio?

Es bien sabido que el comstackdor de Visual Studio de Microsoft no es compatible con C99, y parece que no tienen planes para respaldarlo .

Sin embargo, el comstackdor incluye algunas características escogidas con precisión, como macros variadas y long long , vea las comillas en esta respuesta :

Donde hemos recibido muchas solicitudes de ciertas características de C99, hemos intentado implementarlas (o análogos). Un par de ejemplos son macros variadas, long long , __pragma , __FUNCTION__ y __restrict . Si hay otras características de C99 que le resultarían útiles en su trabajo, ¡infórmenos! No escuchamos mucho de nuestros usuarios de C, así que hablen y háganse oír

– Arjun Bijanki, representante de Microsoft en el comité estándar ISO C http://blogs.msdn.com/b/vcblog/archive/2007/11/05/iso-c-standard-update.aspx

Además, las versiones más nuevas de Visual Studio parecen enviar algunos de los encabezados requeridos por C99 .

Hay muchas preguntas sobre características específicas, pero lo que quiero saber es: ¿Dónde puedo encontrar una lista de las características C99 compatibles / proporcionadas por el comstackdor actual de MSVC?

Estoy buscando una lista como esta para gcc .

Afortunadamente, la postura de Microsoft sobre este tema ha cambiado. La versión 12.0 de MSVC ++ (parte de Visual Studio 2013) agregó soporte para

  • _Bool tipo.
  • Literales compuestos.
  • Inicializadores designados.
  • Mezclando declaraciones con código.
  • __func__ identificador predefinido.

Puede verificar la macro _MSC_VER para valores mayores o iguales a 1800 para ver si estas características son compatibles.

El soporte de la biblioteca estándar también se ha actualizado y se completa principalmente en MSVC 14.0 (Visual Studio 2015).

Cosas que las versiones anteriores ya soportaban (creo que al menos desde MSVC 7.1 / Visual Studio 2003):

  • // comentarios de estilo.
  • long long tipo.
  • Miembros flexibles de la matriz (Microsoft los llamó “matrices sin formato”).
  • Macros variables (al menos parcialmente).

Cosas que aún faltan:

  • Arrays de longitud variable (opcional en C11).
  • Soporte para la palabra clave en inline (puede usar __inline , pero la semántica puede ser ligeramente diferente).
  • Compatibilidad con la palabra clave restrict (es posible que pueda usar __restrict ).
  • Funciones matemáticas de tipo genérico de tgmath.h .
  • _Complex (opcional en C11).

Creo que la única característica de idioma no de biblioteca de C99 (que no está en C90) admitida en MSVC es // comentarios. Además de eso, al comstackr en modo C, las únicas características de C99 que obtendrás se deben a las características de la biblioteca C99 que Microsoft ha incorporado porque esas características se incluyeron en el estándar / borrador estándar / TR de C ++ que el comstackdor de MS soportaba. Por ejemplo, obtuvo stdint.h en VS 2010 porque estaba en el borrador C ++ TR1.

Microsoft ha dejado en claro que no ven un impulso fuerte del mercado para asignar recursos para admitir C99 en MSVC, por lo que es casi seguro que las únicas partes de C99 que verá en el modo de comstackdor C de MSVC son las que se introducen debido a C ++.

Una de las cosas que encuentro frustrante es que las características del lenguaje C99 que no son de la biblioteca y que han sido parte de C ++ durante mucho tiempo no están disponibles en el modo C. Personalmente, me resultaría muy útil si la capacidad de C99 para mezclar declaraciones con declaraciones fuera compatible al comstackr el código C.

Pero parece que las características del lenguaje que ve en C con MSVC hoy es lo que obtendrá de aquí en adelante.