¿Visual Studio 2017 es totalmente compatible con C99?

Las versiones recientes de Visual Studio han mejorado el soporte para C99. ¿La última versión, VS2017, ahora es compatible con todos los C99?

Si no es así, ¿qué características de C99 aún faltan?

No.

https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance

El soporte del comstackdor para las reglas del preprocesador C99 está incompleto en Visual Studio 2017. Las macros de Variadic son compatibles, pero hay muchos errores en el comportamiento del preprocesador.

https://docs.microsoft.com/en-us/cpp/build/walkthrough-compile-ac-program-on-the-command-line

El comstackdor de Visual C ++ C es generalmente compatible con el estándar ISO C99, pero no es estrictamente compatible . En la mayoría de los casos, el código C portátil se comstackrá y ejecutará como se espera. Visual C ++ no admite la mayoría de los cambios en ISO C11 . Ciertas funciones de biblioteca y nombres de funciones POSIX están en desuso por el comstackdor de Visual C ++. Las funciones son compatibles, pero los nombres preferidos han cambiado. Para obtener más información, consulte Funciones de seguridad en el CRT y la advertencia del comstackdor (nivel 3) C4996.

Recuerde que Visual C ++ es, en última instancia, una implementación de C ++ y no un verdadero entorno de C. La compatibilidad es un efecto secundario agradable de la herencia compartida de C y C ++, pero a pesar de las similitudes sintácticas superficiales, los dos son lenguajes muy diferentes.

En gran medida, sí, aunque algunas funciones básicas del lenguaje se implementan de forma no conforme (algunas con errores y otras faltan)

  • Las matrices de longitud variable no son compatibles (aunque ahora son oficialmente opcionales)
  • no se admite el calificador de restrict , en su __restrict se admite __restrict , pero no es exactamente el mismo
  • Los calificadores de nivel superior en declaraciones de matriz en parámetros de función no son compatibles (por ejemplo, void foo(int a[const]) ), así como la palabra clave static en el mismo contexto

Sin embargo, cada nueva versión de Visual Studio trae mejoras en el soporte de C99, por lo que este trabajo no se congela aparentemente.

La respuesta a esta pregunta de 2015 tiene una serie de enlaces relevantes, incluida la hoja de ruta de MS para el soporte de C.