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)'
  • `警告C4820:'some_struct':数据成员'some_member'后添加'4'字节填充字节
  • 等等。 现在,我意识到我可以用#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警告 - 实际上根据标准要求,因为不再支持空参数列表。 这里的要点是要确保在你压制所有绒毛时,实际上并没有压制一些有用的东西。

    链接地址: http://www.djcxy.com/p/72535.html

    上一篇: MSVC equivalent of gcc/clang's

    下一篇: How to implement EXCLUDE