gpt4 book ai didi

c - MSVC 等同于 gcc/clang 的 -Wall?

转载 作者:行者123 更新时间:2023-12-01 13:25:09 25 4
gpt4 key购买 nike

我经常构建 C(和 C++)代码,使用打开了 -Wall 标志的 GCC(或 clang)。现在我碰巧需要确保一个小的 C 项目,它可以在 Linux 上使用这个标志正常构建,也可以在 Windows 上使用 MSVC 构建。

但是,如果我使用 -Wall 运行 MSVC,我会收到许多我认为相当虚假的警告,例如:

  • 警告 C4255:“some_func”:未给出函数原型(prototype):将“()”转换为“(void)”
  • `warning C4820: 'some_struct': 在数据成员 'some_member' 后添加 '4' 字节填充

等等。现在,我意识到我可以使用 #pragma warning(disable:1234) 抑制个别警告;但仍然:什么被认为是 C 代码编译器警告开关与 MS Visual C++ 的常见、合理组合,大致相当于 gcc/clang-墙壁开关?

编辑:如果我问的是-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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com