MSVC相当于gcc / clang的
我经常使用启用了-Wall
标志的GCC(或clang)构建C(和C ++)代码。 现在我碰巧需要确保一个小型的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
的-Wall
开关的常见合理组合?
编辑:如果我问的是-Wall -Wextra
,那就是这个存在的问题。
注:我使用MSVC 2015以防万一 - 但不是IDE,只是编译器。
请注意,MSVC对于标准C代码是非常不合规的。 正如你所看到的,它会产生很多无用的警告,而且很少强制执行C99或C11规定。
典型的方法是定义/ Wall并在项目的属性表中禁止特定的警告,这样就不必在代码中遍布#pragma
指令。 当然,如果你是从命令行构建的,那么你就会使用#pragmas
。
此外,定义CRT_SECURE_NO_WARNINGS
以消除所有有利于使用MS批准版本的大多数字符串函数的警告通常很有用。 这自然会假设你并没有真正使用这些版本。
关于C4255
警告 - 实际上根据标准要求,因为不再支持空参数列表。 这里的要点是要确保在你压制所有绒毛时,实际上并没有压制一些有用的东西。