最近版本的Visual改进了对C99的支持。最新版本的VS2017现在支持所有的C99吗?
如果没有,C99的哪些功能仍然缺失?
发布于 2018-02-05 02:48:19
不是的。
https://learn.microsoft.com/en-us/cpp/visual-cpp-language-conformance
在VisualStudio2017中,编译器对C99预处理规则的支持是不完整的。支持各种宏,但在预处理器的行为中存在许多错误。
https://learn.microsoft.com/en-us/cpp/build/walkthrough-compile-a-c-program-on-the-command-line
Visual C++ C编译器通常与C99标准兼容,但并不严格兼容。在大多数情况下,便携C代码将按预期的方式编译和运行。Visual C++不支持ISO C11中的大多数更改。VisualC++编译器不推荐某些库函数和POSIX函数名。函数是受支持的,但首选名称已经更改。有关更多信息,请参见CRT和编译器警告(级别3) C4996中的安全功能。
请记住,VisualC++最终是一个C++实现,而不是真正的C环境。兼容性是C和C++的共同传统的一个很好的副作用,但是尽管这两种语言在句法上有很大的相似之处,但它们是非常不同的语言。
发布于 2018-02-05 03:53:55
在很大程度上,是的,尽管一些核心语言特性的实现不符合要求(有些有bug,有些缺少)。
restrict限定符,而是支持__restrict,但它并不完全相同。void foo(int a[const]))和关键字static在相同的上下文中不受支持。但是,Visual的每一个新版本都带来了对C99支持的改进,因此这项工作并没有明显冻结。
对2015年this问题的回答有许多相关链接,包括支持C的MS路线图。
https://stackoverflow.com/questions/48615184
复制相似问题