2017-02-04 38 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

第一句只涉及到圖書館,而不是核心語言。 –