我经常构建C(和C ++)代码,使用GCC(或clang)并打开-Wall
标志。现在我碰巧需要确保一个小的C项目,它在带有这个标志的Linux上构建得很好,也建立在带有MSVC的Windows上。
但是,如果我使用-Wall
运行MSVC,我会收到许多警告,我发现这些警告相当虚假,例如:
warning C4255: 'some_func': no function prototype given: converting '()' to '(void)'
等等。现在,我意识到我可以使用#pragma warning(disable:1234)
来抑制个别警告;但仍然:C代码与MS Visual C ++的编译器警告开关的常见,合理组合,大致相当于gcc
/ clang
的{{1}}开关?
修改:如果我问的是-Wall
,那就是this existing question。
注意:我正在使用MSVC 2015以防万一 - 但不是IDE,只是编译器。
答案 0 :(得分:3)
请注意,MSVC严重违反标准C代码。正如您所看到的,它会产生相当多的无用警告,并且很少执行C99或C11规定。
典型的方法是定义/ Wall并在项目的属性表中禁止特定警告,这样您就不必在代码中添加#pragma
指令。当然,如果您是从命令行构建的,那么您仍然坚持使用#pragmas
。
此外,定义CRT_SECURE_NO_WARNINGS
以消除所有支持使用MS批准的大多数字符串函数版本的警告通常很有用。这自然会假设您实际上并未使用这些版本。
关于C4255
警告 - 根据标准,这实际上是必需的,因为不再支持空参数列表。这里的要点是确保当你压制所有的绒毛时,你实际上并没有压制有用的东西。