命令行选项
本节是其他章节的索引。它不深入介绍其他章节中的内容。但是,之一节介绍了语言选择和其他高级选项,例如 -c、-g 等。
控制错误和警告消息的选项
-
将警告转换为错误。
-Wno-错误=foo
即使指定了 -,也要防止警告“foo”转换为错误。
—Wfoo
启用警告“foo”。
-w
禁用所有警告。
-
启用所有警告。
-
警告语言扩展。
--
将语言扩展视为错误。
--
启用系统头文件的警告。
--限制=123
123 个错误后停止诊断。默认值为 20,可以使用 --limit=0 禁用错误限制。
--限制=123
单个警告或错误在模板实例化回溯中最多实例化 123 个模板。默认限制为 10,可以使用 --limit=0 禁用。
格式化诊断信息
Clang 默认旨在生成良好的诊断信息,尤其是针对新的 Clang 用户。但是,不同的人有不同的偏好,有时 Clang 会被另一个想要解析简单且一致的输出的程序调用,而不是由人类调用。对于这些情况,clang 提供了多种选项来控制其生成的诊断信息的输出格式。
-f[不-]显示-
打印诊断信息中的列号。
此选项默认启用,用于控制 Clang 是否打印诊断信息的列数。例如,启用后,Clang 将打印以下内容:
test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]#endif bad^//
禁用时,Clang 将打印“test.c:28:...”而不打印列号。
打印的列号从行首开始计算;如果您的源代码包含多字节字符,请小心。
-f[不-]显示--
在诊断消息中打印源文件/行/列信息。
此选项默认启用,用于控制 Clang 是否打印诊断文件名、行号和列号。例如,启用后,Clang 将输出以下内容:
test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]#endif bad^//
禁用时,Clang 将不会打印“test.c:28:8”部分。
-f[无-]插入符号-
在诊断中打印源文件行和范围。此选项默认启用,控制 Clang 在遇到诊断时是否打印源行、代码范围和插入符号标记。例如,启用后,Clang 将打印以下输出:
test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]#endif bad^//
-f[无-]颜色-
此选项在彩色兼容终端上默认启用,控制 Clang 是否以彩色输出。
启用后,Clang 将使用 Gao 来指定诊断的特定部分,例如:
test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]#endif bad^//
当禁用时,Clang 将仅输出:
test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]#endif bad^//
--=clang/msvc/vi
更改诊断输出以便与 IDE 和命令行工具更加兼容。
此选项控制诊断信息输出中的文件名、行号和列的格式。此选项及其效果将简单转换诊断格式化如下:
clang(默认)
t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int'
微软
t.c(3,11) : warning: conversion specifies type 'char *' but the argument has type 'int'
六
t.c +3:11: warning: conversion specifies type 'char *' but the argument has type 'int'
-f[no-]-显示名称
启用诊断名称显示。此选项默认关闭,控制 Clang 是否打印相关名称。
-f[不-]-显示-
在诊断行中启用[-]信息。
此选项默认启用,控制 Clang 在输出警告诊断时是否打印相关的警告组选项名称。例如,在此输出中:
test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]#endif bad^//
传递 -fno--show- 将阻止 Clang 在其诊断中打印 [--] 消息。此消息告诉您需要哪些标志来启用或禁用诊断,无论是从命令行还是使用 #gcc。
–show-=无/ID/名称
允许在诊断行上打印机密信息。
此选项默认为“无”,用于控制 Clang 在生成诊断时是否打印相关类。每个诊断可能与某个类相关联,也可能不相关联,如果有,则会在诊断行的类字段([] 中)中列出。
例如,格式字符串警告将根据此选项的设置产生以下三行:
t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int' [-Wformat]t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int' [-Wformat,1]t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int' [-Wformat,Format String]
分类可供需要按类别对诊断信息进行分组的客户端使用,因此它应该是高级别的。我们只需要几十个,而不是几百个。
-f[no-]-修复信息
在诊断输出中启用“FixIt”信息。
此选项默认启用,控制 Clang 是否在知道如何修复特定诊断时打印有关如何修复的信息。例如,在此输出中:
test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]#endif bad^//
传递 -fno--fixit-info 将阻止 Clang 打印尾随的“//”行。此信息对于不了解错误是什么的用户非常有用,但可能会混淆机器解析。
--print--范围信息
打印有关源范围的机器可解析信息。此选项使 Clang 以机器可解析的格式在文件/行/列后打印有关源范围的信息。该信息是一串简单的花括号,每个范围列出起始和终止行/列位置。例如,在此输出中:
exprs.c:47:15:{47:8-47:14}{47:17-47:24}: error: invalid operands to binary expression ('int *' and '_Complex float')P = (P-42) + Gamma*4;~~~~~~ ^ ~~~~~~~
{} 由 --print--range-info 生成。
打印的列号从行首开始计算;请小心文件中的多字节字符。
---
以机器可解析的格式打印 Fix-It。
此选项使 Clang 在诊断结束时以机器可解析的格式打印可用的 Fix-It 信息。以下示例显示了格式:
fix-it:"t.cpp":{7:25-7:29}:"Gamma"
输出中的范围是半开范围,因此在此示例中,从 t.cpp 的第 25 列开始到第 7 行第 29 列(但不包括该字符串)的字符应替换为“Gamma”。范围或替换字符串可以为空(分别用于严格插入和严格擦除)。文件名和插入字符串转义反斜杠(“\”)、制表符(“\t”)、换行符(“\n”)、双引号(“\"”)和不可打印字符(八进制“\xxx”)。
打印的列号从行首开始计算;请小心文件中的多字节字符。
-fno-省略类型
关闭模板类型打印中的省略号。
默认模板类型打印会省略尽可能多的模板参数clang,删除跨模板类型相同的模板参数,只留下不同的模板参数。添加此标志将打印所有模板参数。如果终端支持,不同参数上将显示高亮显示。
默认:
t.cc:4:5: note: candidate function not viable: no known conversion from 'vector to 'vector for 1st argument;
-fno-省略类型:
t.cc:4:5: note: candidate function not viable: no known conversion from 'vector to 'vector for 1st argument;
--显示-树
模板类型区分打印文本的树。
对于大型模板类型,此选项将产生一个有意的文本树,每行一个参数,带有不同的内联标记。这与 -fno-elide-type 兼容。
默认:
t.cc:4:5: note: candidate function not viable: no known conversion from 'vector to 'vector for 1st argument;
使用--show--tree
t.cc:4:5: note: candidate function not viable: no known conversion for 1st argument;vector<map<[...],map<[float != float],[...]>>>
个别警告组
TODO:从生成此内容开始。为每个警告组定义一个锚点。
--
警告预处理指令末尾的额外标识符。
默认情况下,此选项启用对预处理器指令末尾过多标识符的警告。例如:
test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]#endif bad^
这些额外的标识符并不严格符合要求,通常更好将它们注释掉。
---
警告使用不合格的成员模板,在使用时名称会解析为另一个模板。
此选项默认处于启用状态,可在代码中启用警告,如下所示:
template<typename T> struct set{};template<typename T> struct trait { typedef const T& type; };struct Value {template<typename T> void set(typename trait<T>::type value) {}};void foo() {Value v;v.set(3.2); }
C++[basic..] 要求这是一个错误,但是,由于工作更加困难,Clang 作为扩展将其降级为警告。
-Wbind-to-copy(绑定到--复制)
当将引用绑定到临时变量时,警告已禁用的复制构造函数。
默认情况下,此选项启用,当临时文件没有可用的复制构造函数时,会启用有关绑定对临时文件的引用的警告。例如:
struct NonCopyable {NonCopyable();private:NonCopyable(const NonCopyable&);};void foo(const NonCopyable&);void bar() {foo(NonCopyable()); // Disallowed in C++98; allowed in C++11.}
struct NonCopyable2 {NonCopyable2();NonCopyable2(NonCopyable2&);};void foo(const NonCopyable2&);void bar() {foo(NonCopyable2()); // Disallowed in C++98; allowed in C++11.}
请注意,如果 ::() 具有默认参数,则其实例化会产生编译错误,即使关闭此警告,该错误在 C++98 模式下仍为硬错误。
控制 Clang 崩溃诊断选项
听起来难以置信,Clang 有时会崩溃。通常,这种情况只发生在边缘。Clang 可以帮助您填写错误报告。具体来说,Clang 在崩溃时会生成预编译的源文件和相关的运行时脚本。这些文件应附加到错误报告中。以下是控制崩溃诊断的命令行选项。
-fno-崩溃-
在 clang 崩溃期间禁用预编译源文件的自动生成。
-fno-crash- 标志可以帮助加快构建过程。
未经允许不得转载! 作者:admin,转载或复制请以超链接形式并注明出处天心神途传奇手游发布网。
原文地址:《clang 中文用户手册 & llvm 文档》发布于:2024-06-27




还没有评论,来说两句吧...