4

我试图让 Visual Studio 在编译项目时强制执行 ANSI C 标准,但我无法让它工作。有小费吗?我已阅读所有教程,启用了 /Za 选项,并将我的文件命名为 .c(不是 .cpp)。但是,以下程序仍然可以成功构建:

#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中甚至可能吗?

4

1 回答 1

4

这个页面,MSVC 2015 似乎只支持 C99:

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

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

/Za开关仅禁用Microsoft 特定的扩展:

Visual C++ 编译器提供了许多超出 ANSI C89、ISO C99 或 ISO C++ 标准中指定的功能。这些功能统称为 Microsoft 对 C 和 C++ 的扩展。这些扩展在默认情况下可用,在指定 /Za 选项时不可用。有关特定扩展的详细信息,请参阅 Microsoft 对 C 和 C++ 的扩展。

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

于 2017-02-04T17:14:14.993 回答