最新版本的Visual Studio已经看到了对C99的改进支持。最新版本VS2017现在支持所有C99吗?
如果没有,C99的哪些功能仍然缺失?
答案 0 :(得分:10)
没有
https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance
编译器对C99预处理程序规则的支持在Visual Studio 2017中不完整。支持可变参数宏,但预处理程序的行为中存在许多错误。
https://docs.microsoft.com/en-us/cpp/build/walkthrough-compile-a-c-program-on-the-command-line
Visual C ++ C编译器通常与ISO C99标准兼容,但不严格兼容。在大多数情况下,可移植的C代码将按预期编译和运行。 Visual C ++不支持ISO C11中的大多数更改。 Visual C ++编译器不推荐使用某些库函数和POSIX函数名。支持这些功能,但首选名称已更改。有关详细信息,请参阅CRT和编译器警告(级别3)C4996中的安全功能。
请记住,Visual C ++最终是一个C ++实现,而不是一个真正的C环境。兼容性是C和C ++共享遗产的一个很好的副作用,但尽管语法上有相似之处,但两者的语言却截然不同。
答案 1 :(得分:2)
很大程度上,是的,虽然一些核心语言功能实现不合规(一些有错误,一些缺失)
restrict
限定符不受支持,但__restrict
支持,但它不完全相同void foo(int a[const])
)以及相同上下文中的关键字static
但是,每个新版本的Visual Studio都会带来C99支持的改进,因此这项工作显然不会被冻结。
对2015年this问题的回答有许多相关链接,包括C支持的MS路线图。