Cxxdroid 中文文档 下载 App

构建输出与错误信息 —— 看懂 Clang 在说什么

编译输出在哪

点击编译按钮后,屏幕底部或侧边的控制台面板会自动展开,显示:

  1. 编译器执行的命令(可以看到具体的 clang++ 调用参数)
  2. 编译进度(正在处理哪个文件)
  3. 编译结果(成功 / 失败 + 统计信息)
  4. 运行输出(可执行文件执行的 stdout / stderr)
控制台面板:红色错误信息定位到具体行号和列号

成功输出长什么样

编译成功时,控制台末尾会显示类似:

Compilation successful (0 errors, 0 warnings)
Build time: 1.2s
Running...
Hello, World!
Program finished with exit code 0

退出码 0 表示正常执行完毕。

错误输出的结构

Clang 的错误输出格式:

main.cpp:47:5: error: no member named 'Foo' in namespace 'std'
    std::Foo bar;
    ~~~~ ^
main.cpp:50:12: warning: unused variable 'bar'
    return bar;
           ^~~

三行信息:

最常见的 10 种编译错误

错误含义常见原因
no such file or directory找不到文件头文件路径写错、没 include、库没装
use of undeclared identifier未声明的标识符拼写错误、忘了 include、作用域不对
expected ';' after expression分号缺失括号没闭合、大括号配对错误
no matching function for call to函数调用不匹配参数类型不对、const 限定不符
cannot initialize return object of type返回类型不匹配返回值类型与函数签名不一致
member reference base type '...' is not a structure非结构体做了成员访问对基本类型用 . 或 ->
operator... not supported运算符不支持类型不匹配(比如 int 加 std::string)
no member named '...' in '...'类型里没有这个成员拼写错误、用了旧版本 API
redefinition of '...'重复定义头文件缺少 include guard、函数写了两次
undefined reference to链接阶段找不到符号忘了链接库(缺 -lboost)、静态变量没定义

点击错误跳转到代码

Cxxdroid 支持在控制台里直接点击错误提示的文件名+行号,跳转到对应的代码位置。比在手机上手动滚动找 47 行效率高多了。

警告不是错误

Warnings(警告)不影响编译成功,但它们在告诉你「这里有潜在问题」。比如:

建议把警告也修掉——它们是 bug 的温床。