我是Visual Studio环境的新手,我正在使用VS2017专业版。我想用C语言编写简单的程序,并同时使用c99
和c11
标准进行编译。在Visual Studio中,我只能找到C++标准的编译器开关。
我们如何告诉visual studio环境我们希望用c99
和c11
C标准编译当前代码。
发布于 2018-02-26 15:51:00
可视化C++支持的唯一“模式”是:符合C++14的/std:c++14
模式(默认),支持C++17的/std:c++17
模式,这在VS 2017 (15.6)中还不是很完整。还有一种/std:c++latest
模式,在将来的某个时刻,它将在C++20中包含一些东西。所有这些都应该与/permissive-
结合起来,以提高一致性。
为了满足C++11标准库的一致性,Visual C++必须支持C99标准库,这与支持C99语言一致性不是一回事。
在某种程度上,为了满足C++17标准库的要求,Visual C++必须支持C11标准库,这与C11语言一致性不是一回事。
请参阅C++ Standards Conformance from Microsoft和C++11/14 STL Features, Fixes, And Breaking Changes In VS 2013
在帖子MSVC: The best choice for Windows中有一个评论线程,其中Visual C++项目经理接受了真正的'C11‘一致性的问题。
嗨,奥努尔
虽然我们首先关注的是C++一致性,但C一致性已经在我们的雷达上了。
我们在VS 2013中做了一些关于C符合性的工作,尽管我们没有太多地宣传它。这项工作包括:
-- C99 _Bool
- C99复合文字
- C99指定的初始化器
- C99变量声明
我们的C++一致性工作已经接近尾声。最后一项是一致性预处理器:这是C和C++共享的特性。预处理器将标志着我们C一致性推送的开始,以及我们C++98/11/14一致性工作的结束。
安德鲁
更新: VS 2019 (16.8)将包括/std:c11
和/std:c17
标准交换机。参见this blog post。由于MSVC编译器不支持可变长度数组(VLA),因此它不要求符合C99。请注意,这些开关启用this blog post中介绍的新C99预处理器。
发布于 2018-02-28 19:53:16
Visual Studio主要是一个C++编译器。在"C模式“中,它遵循自1990年以来的一个古老的C标准。
在2013-2015年左右,他们做出了一些努力,支持的不是当前的C标准,而是1999年发布的前一个C标准("C99"),大约在发布16年后。然而,符合这个标准的工作还没有完成。
我相信编译器还支持当前C语言("C11")的一些选定特性,例如可选的边界检查库。该标准已推出7年,但尚未完全支持。
因此,如果你需要一个符合标准的C语言编译器,你应该寻找其他的替代方案。
https://stackoverflow.com/questions/48981823
复制相似问题