为什么有些GCC警告标志不属于C ++语言,但仍可以在C ++中使用?

Ada*_*ura 6 c++ gcc

我正在探索GCC使用该gcc -Q --help=warning语法提供的警告。(有关此内容的更多信息,请参见3.2选项控制输出的种类。)

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

但是,至少其中一些警告确实在C ++中起作用。举个例子-Waggregate-return。(在Compiler Explorer上查看)。

-Waggregate-return默认情况下禁用,我知道这可能是没有多大用处呢(见在问候的-Waggregate回报的目的/行为的混乱呢?)。但是,这只是一个示例,在相同情况下的那些109中也许有一些有用的标志。

那么,为什么有些GCC警告标志不属于C ++语言,但可以在C ++中工作?这是什么规则?

Ada*_*ura 0

受到Vladislav Ivanishin 答案的启发,主要是“通用”标志的概念,我已经对我正在使用的 GCC 中的警告消息进行了分割(6.4.1):

  1. 常见- 58
  2. C++ - 141
  3. C -133
  4. 目标C -135
  5. 目标 C++ - 141
  6. Fortran - 36
  7. 艾达-2
  8. - 2
  9. 爪哇-5

总共有 250 条消息,所有消息均由上述语言中的一种或多种语言涵盖。但是,我不确定这是否是受支持语言的完整列表 - 我不知道如何检查任意版本的 GCC 支持哪些语言。

问题-Waggregate-return中的 属于“通用”类别,这就是为什么它也是为 C++ 语言生成的。