我经常使用GCC(或clang)并打开-Wall
标志来构建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
,那就是this existing question。注意:如果有问题,我将使用MSVC 2015-但不是IDE,而是编译器。
最佳答案
请注意,MSVC非常不符合标准C代码的要求。如您所见,它会生成很多无用的警告,并且很少执行C99或C11规定。
典型的方法是在项目的属性表中定义/ Wall并禁止显示特定的警告,这样您就不必在整个代码中散布#pragma
指令。当然,如果您是从命令行构建的,那么就不得不使用#pragmas
。
另外,定义CRT_SECURE_NO_WARNINGS
来消除所有支持使用MS批准的大多数字符串函数版本的所有警告通常非常有用。这自然会假设您实际上并没有使用那些版本。
关于C4255
警告-根据标准,实际上是必需的,因为不再支持空参数列表。这里的重点是要确保在抑制所有绒毛的同时,您实际上并未抑制有用的东西。
关于c - MSVC相当于gcc/clang的-Wall?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48568053/