2017-02-04 33 views
2

我试图让Visual Studio在编译项目时强制执行A​​NSI C标准,但是我无法让它正常工作。 任何提示? 我已阅读所有教程,我启用了/ Za选项,并将我的文件命名为.c(不是.cpp)。但是,下面的程序仍然能够成功地建立:在Visual Studio 2015中强制执行A​​NSI C标准

#include <stdio.h> 
void main(void) 
{ 
    for (int i = 0; i < 10; i++) 
    { 
    } 
    int f = 0; 
} 

但它不应该。它必须是这样的尊重ANSI C标准:

#include <stdio.h> 
void main(void) 
{ 
    int i; 
    int f = 0; 
    for (i = 0; i < 10; i++) 
    { 
    } 
} 

我想的GCC选项“-ansi”和“-Wpedantic相当于”。 这VS甚至可能吗?

+1

第一个程序完全(除了'void main'位)符合当前的ANSI C标准,它与当前的ISO C标准(通常称为C11)相同。 VS2015不支持它。它只支持一个*前*标准,C99,该程序也符合该标准。如果您想要符合其他以前的标准(如C89/90),则需要将工具集降级到类似v100(VS2010)的类别,或使用其他编译器。没有什么像MSVC中的“-std”标志。 –

回答

3

this page,MSVC 2015年似乎只支持C99:

C99一致性的Visual Studio 2015年完全实现了C99标准库,具有依赖于编译器的任何库功能异常功能尚不支持通过Visual C++编译器(例如,<tgmath.h>未实现)。

没有提及该页面上任何地方的C89兼容性。

/Za switch只禁止微软具体扩展:

在Visual C++编译器提供了许多超越那些无论是在ANSI C89,C99 ISO,或ISO C++标准规定的功能。这些功能统称为微软对C和C++的扩展。这些扩展名默认可用,并且在指定/ Za选项时不可用。有关特定扩展名的更多信息,请参阅Microsoft扩展至C和C++。

如果它们是其支持的官方C标准(如C99)的一部分,它将不会禁用非Microsoft特定扩展。

+0

我想我想要的是相当于GCC选项: -ansi -Wantantic 您可以确认这在Visual C++中是不可行的吗? 谢谢 – user2527666

+0

第一句只涉及到图书馆,而不是核心语言。 –