MSVC中与gcc/clang的-Wall参数等效的选项是什么?

3
我经常使用GCC(或clang)的-Wall标志来构建C(和C ++)代码。现在,我碰巧需要确保一个小型的C项目,在Linux上使用此标志构建良好的情况下,也可以在Windows上使用MSVC构建。
然而,如果我使用-Wall运行MSVC,我会得到许多警告,我觉得这些警告相当牵强,比如:
- warning C4255: 'some_func': no function prototype given: converting '()' to '(void)' - `warning C4820: 'some_struct': '4' bytes padding added after data member 'some_member'
等等。现在,我意识到我可以使用#pragma warning(disable:1234)来抑制单个警告;但是仍然有疑问:对于C代码与MS Visual C++,哪种编译器警告组合被认为是常见且合理的,大致相当于gcc/clang-Wall开关?
编辑:如果我询问-Wall -Wextra,那将是this existing question
注意:我正在使用MSVC 2015编译器,但不是IDE。

相关:https://stackoverflow.com/q/20369451/995714 https://stackoverflow.com/q/35398878/995714 - phuclv
1个回答

3
请注意,MSVC对标准C代码的兼容性非常糟糕。正如您所见,它生成了许多无用的警告,并且很少强制执行C99或C11规定。
通常的做法是定义/Wall并在项目属性表中禁止特定的警告,这样您就不必在整个代码中到处添加#pragma指令。当然,如果您从命令行构建,则只能使用#pragma。
此外,通常有用的是定义CRT_SECURE_NO_WARNINGS以消除所有倾向于使用MS批准版本的大多数字符串函数的警告。这自然假定您实际上没有在使用这些版本。
关于C4255警告 - 实际上根据标准要求,因为不再支持空参数列表。关键是确保在抑制所有无用信息时,不会抑制有用的信息。

哦,你似乎刚刚回答了我另一个问题的一部分...但是,“属性表”是什么?需要注意的是,我实际上没有使用MSVS IDE。 - einpoklum
@einpoklum:看我的编辑->如果你正在使用Visual Studio,你可以在项目中设置禁用的警告。否则,你必须使用#pragma方法。 - Mark Benningfield
1
如果您使用MSBuild进行编译,属性表是项目文件中可注入的一部分,您还可以直接将这些静音标志设置到项目文件本身中。否则,您需要直接将它们传递给编译器。 - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接