如何查询C++;? GCC允许使用C++语法查询特定的警告标志: g++ -Q --help=warning,c++
向调用中添加警告标志会将其包含在结果中:如何查询C++;? GCC允许使用C++语法查询特定的警告标志: g++ -Q --help=warning,c++,gcc,gcc-warning,Gcc,Gcc Warning,向调用中添加警告标志会将其包含在结果中: 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 f
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-only相同-Wbad函数cast
的行为符合预期:
gcc -Wbad-function-cast -Q --help=warning,c
在[禁用]
和[启用]
之间没有额外的消息和报告的警告状态更改。同样,无论是使用g++
还是gcc
我使用的是GCC版本7.3.0。尽管这个问题似乎适用于许多版本,如果不是所有版本的话
那么,有没有一种方法可以对给定的语言执行此查询?是的,您的观察是正确的 可能这不是预期的行为,如果您关心此功能,那么我建议向上游报告 但请注意,这是可行的:
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);
以下是创建虚拟文件的方式(同一文件中的函数process\u命令
):
我已经提交了一个bug:。顺便说一句,虚拟源文件技巧不适用于我的7.3.0。从这一点来看,它不适用于任何版本,包括目前的TOP9.1。它只适用于主干版本。此外,需要一个现有文件使其有点不完善。@AdamBadura“此外,需要一个现有文件使其有点不完善。”-作为另一种解决方法,您可以直接调用特定语言前端(
cc1plus
)。我认为,gcc——打印文件名cc1plus
应该是获取可执行文件路径的一种可移植方式。“我提出了一个错误:……”-太好了!我认为,我们应该继续在那里进行讨论,把它放在一个地方。
p n_infiles
$9 = 1
(gdb) p infiles[0]
$10 = {name = 0x4cbfb0 "help-dummy", language = 0x4cbfae "c", incompiler = 0x58a920, compiled = false, preprocessed = false}
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");
}