命令行选项

本节是其他章节的索引。它不深入介绍其他章节中的内容。但是,之一节介绍了语言选择和其他高级选项,例如 -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 将打印以下内容:

  1. test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
  2. #endif bad
  3. ^
  4. //

禁用时,Clang 将打印“test.c:28:...”而不打印列号。

打印的列号从行首开始计算;如果您的源代码包含多字节字符,请小心。

-f[不-]显示--

在诊断消息中打印源文件/行/列信息。

此选项默认启用,用于控制 Clang 是否打印诊断文件名、行号和列号。例如,启用后,Clang 将输出以下内容:

  1. test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
  2. #endif bad
  3. ^
  4. //

禁用时,Clang 将不会打印“test.c:28:8”部分。

-f[无-]插入符号-

在诊断中打印源文件行和范围。此选项默认启用,控制 Clang 在遇到诊断时是否打印源行、代码范围和插入符号标记。例如,启用后,Clang 将打印以下输出:

  1. test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
  2. #endif bad
  3. ^
  4. //

-f[无-]颜色-

此选项在彩色兼容终端上默认启用,控制 Clang 是否以彩色输出。

启用后,Clang 将使用 Gao 来指定诊断的特定部分,例如:

  1. test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
  2. #endif bad
  3. ^
  4. //

当禁用时,Clang 将仅输出:

  1. test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
  2. #endif bad
  3. ^
  4. //

--=clang/msvc/vi

更改诊断输出以便与 IDE 和命令行工具更加兼容。

此选项控制诊断信息输出中的文件名、行号和列的格式。此选项及其效果将简单转换诊断格式化如下:

clang(默认)

  1. t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int'

微软

  1. t.c(3,11) : warning: conversion specifies type 'char *' but the argument has type 'int'

  1. t.c +3:11: warning: conversion specifies type 'char *' but the argument has type 'int'

-f[no-]-显示名称

启用诊断名称显示。此选项默认关闭,控制 Clang 是否打印相关名称。

-f[不-]-显示-

在诊断行中启用[-]信息。

此选项默认启用,控制 Clang 在输出警告诊断时是否打印相关的警告组选项名称。例如,在此输出中:

  1. test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
  2. #endif bad
  3. ^
  4. //

传递 -fno--show- 将阻止 Clang 在其诊断中打印 [--] 消息。此消息告诉您需要哪些标志来启用或禁用诊断,无论是从命令行还是使用 #gcc。

–show-=无/ID/名称

允许在诊断行上打印机密信息。

此选项默认为“无”,用于控制 Clang 在生成诊断时是否打印相关类。每个诊断可能与某个类相关联,也可能不相关联,如果有,则会在诊断行的类字段([] 中)中列出。

例如,格式字符串警告将根据此选项的设置产生以下三行:

  1. t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int' [-Wformat]
  2. t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int' [-Wformat,1]
  3. t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int' [-Wformat,Format String]

分类可供需要按类别对诊断信息进行分组的客户端使用,因此它应该是高级别的。我们只需要几十个,而不是几百个。

-f[no-]-修复信息

在诊断输出中启用“FixIt”信息。

此选项默认启用,控制 Clang 是否在知道如何修复特定诊断时打印有关如何修复的信息。例如,在此输出中:

  1. test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
  2. #endif bad
  3. ^
  4. //

传递 -fno--fixit-info 将阻止 Clang 打印尾随的“//”行。此信息对于不了解错误是什么的用户非常有用,但可能会混淆机器解析。

--print--范围信息

打印有关源范围的机器可解析信息。此选项使 Clang 以机器可解析的格式在文件/行/列后打印有关源范围的信息。该信息是一串简单的花括号,每个范围列出起始和终止行/列位置。例如,在此输出中:

  1. exprs.c:47:15:{47:8-47:14}{47:17-47:24}: error: invalid operands to binary expression ('int *' and '_Complex float')
  2. P = (P-42) + Gamma*4;
  3. ~~~~~~ ^ ~~~~~~~

{} 由 --print--range-info 生成。

打印的列号从行首开始计算;请小心文件中的多字节字符。

---

以机器可解析的格式打印 Fix-It。

此选项使 Clang 在诊断结束时以机器可解析的格式打印可用的 Fix-It 信息。以下示例显示了格式:

  1. fix-it:"t.cpp":{7:25-7:29}:"Gamma"

输出中的范围是半开范围,因此在此示例中,从 t.cpp 的第 25 列开始到第 7 行第 29 列(但不包括该字符串)的字符应替换为“Gamma”。范围或替换字符串可以为空(分别用于严格插入和严格擦除)。文件名和插入字符串转义反斜杠(“\”)、制表符(“\t”)、换行符(“\n”)、双引号(“\"”)和不可打印字符(八进制“\xxx”)。

打印的列号从行首开始计算;请小心文件中的多字节字符。

-fno-省略类型

关闭模板类型打印中的省略号。

默认模板类型打印会省略尽可能多的模板参数clang,删除跨模板类型相同的模板参数,只留下不同的模板参数。添加此标志将打印所有模板参数。如果终端支持,不同参数上将显示高亮显示。

默认:

  1. t.cc:4:5: note: candidate function not viable: no known conversion from 'vector>>' to 'vector>>' for 1st argument;

-fno-省略类型:

  1. t.cc:4:5: note: candidate function not viable: no known conversion from 'vector>>' to 'vector>>' for 1st argument;

--显示-树

模板类型区分打印文本的树。

对于大型模板类型,此选项将产生一个有意的文本树,每行一个参数,带有不同的内联标记。这与 -fno-elide-type 兼容。

默认:

  1. t.cc:4:5: note: candidate function not viable: no known conversion from 'vector>>' to 'vector>>' for 1st argument;

使用--show--tree

  1. t.cc:4:5: note: candidate function not viable: no known conversion for 1st argument;
  2. vector<
  3. map<
  4. [...],
  5. map<
  6. [float != float],
  7. [...]>>>

个别警告组

TODO:从生成此内容开始。为每个警告组定义一个锚点。

--

警告预处理指令末尾的额外标识符。

默认情况下,此选项启用对预处理器指令末尾过多标识符的警告。例如:

  1. test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
  2. #endif bad
  3. ^

这些额外的标识符并不严格符合要求,通常更好将它们注释掉。

---

警告使用不合格的成员模板,在使用时名称会解析为另一个模板。

此选项默认处于启用状态,可在代码中启用警告,如下所示:

  1. template<typename T> struct set{};
  2. template<typename T> struct trait { typedef const T& type; };
  3. struct Value {
  4. template<typename T> void set(typename trait<T>::type value) {}
  5. };
  6. void foo() {
  7. Value v;
  8. v.set(3.2);
  9. }

C++[basic..] 要求这是一个错误,但是,由于工作更加困难,Clang 作为扩展将其降级为警告。

-Wbind-to-copy(绑定到--复制)

当将引用绑定到临时变量时,警告已禁用的复制构造函数。

默认情况下,此选项启用,当临时文件没有可用的复制构造函数时,会启用有关绑定对临时文件的引用的警告。例如:

  1. struct NonCopyable {
  2. NonCopyable();
  3. private:
  4. NonCopyable(const NonCopyable&);
  5. };
  6. void foo(const NonCopyable&);
  7. void bar() {
  8. foo(NonCopyable()); // Disallowed in C++98; allowed in C++11.
  9. }

  1. struct NonCopyable2 {
  2. NonCopyable2();
  3. NonCopyable2(NonCopyable2&);
  4. };
  5. void foo(const NonCopyable2&);
  6. void bar() {
  7. foo(NonCopyable2()); // Disallowed in C++98; allowed in C++11.
  8. }

请注意,如果 ::() 具有默认参数,则其实例化会产生编译错误,即使关闭此警告,该错误在 C++98 模式下仍为硬错误。

控制 Clang 崩溃诊断选项

听起来难以置信,Clang 有时会崩溃。通常,这种情况只发生在边缘。Clang 可以帮助您填写错误报告。具体来说,Clang 在崩溃时会生成预编译的源文件和相关的运行时脚本。这些文件应附加到错误报告中。以下是控制崩溃诊断的命令行选项。

-fno-崩溃-

在 clang 崩溃期间禁用预编译源文件的自动生成。

-fno-crash- 标志可以帮助加快构建过程。

未经允许不得转载! 作者:admin,转载或复制请以超链接形式并注明出处天心神途传奇手游发布网

原文地址:《clang 中文用户手册 &amp; llvm 文档》发布于:2024-06-27

发表评论

表情:
验证码
评论列表 (暂无评论,95人围观)

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