cat warning.cpp #pragma foobar > cat no_warning.cpp #pragma message "foobar" > g++ -Wall -Wno-foob-6ren">
gpt4 book ai didi

c++ - 为什么 "cc1plus: warning: unrecognized command line option"选项的 "no-"仅在出现另一个警告时由 g++ 标记?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:49 25 4
gpt4 key购买 nike

> cat warning.cpp
#pragma foobar
> cat no_warning.cpp
#pragma message "foobar"
> g++ -Wall -Wno-foobar -c warning.cpp
warning.cpp:1:0: warning: ignoring #pragma foobar [-Wunknown-pragmas]
cc1plus: warning: unrecognized command line option "-Wno-foobar" [enabled by default]
> g++ -Wall -Wno-foobar -c no_warning.cpp
no_warning.cpp:1:17: note: #pragma message: foobar

最佳答案

这是设计使然,已解释 here :

When an unrecognized warning option is requested (e.g., -Wunknown-warning),
GCC emits a diagnostic stating that the option is not recognized.

However, if the -Wno- form is used, the behavior is slightly different:
no diagnostic is produced for -Wno-unknown-warning unless other diagnostics
are being produced.

This allows the use of new -Wno- options with old compilers, but if something
goes wrong, the compiler warns that an unrecognized option is present.

换句话说,假设您有 foo.cc,并且 GCC-4.9 对其中的某些内容(我们称它为 foobar)发出警告,但您相信您的使用foobar 是安全的。

由于您希望将所有警告视为错误(使用 -Werror),您尽职尽责地将 -Wno-foobar 添加到您的 Makefile

现在其他人尝试使用 GCC-4.8 构建您的代码。如上所述,这不会产生警告并且他成功了。

如果这确实产生了警告,您将无法同时使用 foobar 构造和具有同时适用于 GCC-4.8 和 GCC- 的单个 Makefile 4.9.

关于c++ - 为什么 "cc1plus: warning: unrecognized command line option"选项的 "no-"仅在出现另一个警告时由 g++ 标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20322953/

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