gpt4 book ai didi

c++ - 为什么一些 GCC 警告标志不属于 C++ 语言但在 C++ 中工作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:42 25 4
gpt4 key购买 nike

我正在探索 GCC 使用 gcc -Q --help=warning 语法提供的警告。 (有关详细信息,请参阅 3.2 Options Controlling the Kind of Output。)

我想到的是许多(GCC 版本 6.4.1 中的 250 个中有 109 个)警告未归类为 C++。我的意思是,在执行受限查询 gcc -Q --help=warning,c++ 时,它们不会出现。 (出于好奇,81 个警告既不是 C++ 也不是 C。)

然而,至少其中一些警告在 C++ 中有效。以 -Waggregate-return 为例。 (在 Compiler Explorer 上查看。)

-Waggregate-return 默认情况下是禁用的,我知道它可能没什么用(参见 Confusion in regards to purpose/behavior of -Waggregate-return? )。不过,这只是一个例子,也许在同案的那109条中有一些有用的标志。

那么,为什么一些 GCC 警告标志不属于 C++ 语言,却在 C++ 中起作用?这里的规则是什么?

最佳答案

这是两个文档中的错误

   --help={class|[^]qualifier}[,...]
Print (on the standard output) a description of the command-line options understood by the compiler that fit into all specified classes and qualifiers. These are the
supported classes:
...

language
Display the options supported for language, where language is the name of one of the languages supported in this version of GCC.

或实现(我认为是后者。)因此,如果您愿意,请继续提交错误。请务必在此处发布指向问题报告的链接。

具体来说,您没有看到任何Common,例如标有 CL_COMMON 标志的与语言无关的选项。您确实会看到适用于多种语言的选项,但不是全部(例如,如果它们同时具有 CL_CCL_CXX 标志;CL_COMMON 是单独的标志,其值不是由各个语言标志的值组成)。

负责的代码在 gcc/opts.c:1360 附近:

print_filtered_help (unsigned int include_flags,
unsigned int exclude_flags,
unsigned int any_flags,
unsigned int columns,
struct gcc_options *opts,
unsigned int lang_mask)
unsigned int lang_mask)
...

if (include_flags == 0
|| ((option->flags & include_flags) != include_flags))
{
if ((option->flags & any_flags) == 0)
continue;
}

(调用者为 any_flags 传递 0,因此内部检查总是成功;这不是这里的重点。)

关于c++ - 为什么一些 GCC 警告标志不属于 C++ 语言但在 C++ 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56594534/

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