gpt4 book ai didi

gcc - 如何查询C++的GCC警告?

转载 作者:行者123 更新时间:2023-12-03 03:50:47 31 4
gpt4 key购买 nike

GCC 允许查询特定于 C++ 语言的可用警告标志,语法如下:

g++ -Q --help=warning,c++

向调用添加警告标志会将它们包含在结果中:

g++ -Wall -Q --help=warning,c++

但是,似乎调用是从 C 角度完成的,我不知道如何从 C++ 角度进行调用。如果调用包含仅限 C++ 的警告,例如:

g++ -Wnon-virtual-dtor -Q --help=warning,c++

输出包含一条消息:

cc1: warning: command line option ‘-Wnon-virtual-dtor’ is valid for C++/ObjC++ but not for C

并且仍然显示警告为禁用:

  -Wnon-virtual-dtor                    [disabled]

请注意,无论调用是使用 g++ 还是 gcc 完成,都会发生这种情况。

与仅 C 语言相同的 -Wbad-function-cast 的行为符合预期:

gcc -Wbad-function-cast -Q --help=warning,c

[disabled][enabled] 之间没有额外消息和报告的警告状态变化。同样,无论使用的是 g++ 还是 gcc

我使用的是 GCC 版本 7.3.0。尽管这个问题似乎适用于许多(如果不是全部)版本。 It can be observed through Compiler Explorer .

那么,有没有办法针对给定语言执行此查询?

最佳答案

是的,您的观察是正确的。

这可能不是预期的行为,如果您关心此功能,那么我建议向上游报告。

但是请注意,这是有效的:

touch 1.cc
g++ -Wnon-virtual-dtor -Q --help=warning,c++ 1.cc

即如果存在具有正确扩展名的输入文件,则会调用正确的编译器正确的可执行文件:cc1plus,而不是cc1。如果不存在输入文件,则后者是默认值。我进行了一些快速调试,具体情况如下:

// gcc.c:
driver::do_spec_on_infiles () const
{
...
for (i = 0; (int) i < n_infiles; i++)
{
...
/* Figure out which compiler from the file's suffix. */

input_file_compiler
= lookup_compiler (infiles[i].name, input_filename_length,
infiles[i].language);

if (input_file_compiler)
{
...
value = do_spec (input_file_compiler->spec);

此时的 input_file_compiler 是 C 编译器,因为

p n_infiles
$9 = 1
(gdb) p infiles[0]
$10 = {name = 0x4cbfb0 "help-dummy", language = 0x4cbfae "c", incompiler = 0x58a920, compiled = false, preprocessed = false}

以下是创建虚拟文件的方式(同一文件中的函数 process_command):

  if (n_infiles == 0
&& (print_subprocess_help || print_help_list || print_version))
{
/* Create a dummy input file, so that we can pass
the help option on to the various sub-processes. */
add_infile ("help-dummy", "c");
}

关于gcc - 如何查询C++的GCC警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56753102/

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