第一章 入门:第一个程序与编译

← 返回目录

本章目标:写一个能跑的程序,理解编译、运行、语法错误。 看完约 5 分钟,请动手敲每一个例子。

1.1 C++ 程序长什么样?

一个最简单的完整 C++ 程序:

#include <print>
int main() {
    std::println("你好,C++!");
}

拆开看每一行:

1) #include <print> "include" 的意思是"把别人的代码拿进来"。 <print> 是 C++23 标准库里的"打印"模块,提供 println(打印一行)。 # 开头的行叫"预处理指令",是编译之前先处理的一步。

2) int main() { ... } 程序的主入口。程序运行,就是从 main 函数第一行开始执行。 int 表示 main 最后要"返回一个整数"给系统,0 表示一切正常。 你不写 return 0; 也没关系,编译器会自动补上(现代 C++ 约定)。

3) std::println("...") std 是"标准命名空间",println 是"print line"(打印一行)。 可以理解为:调用"标准库里的 println 函数"。 "::" 是作用域运算符,读作"里的"。

1.2 怎么编译和运行?

把代码保存成文件 hello.cpp,然后打开终端:

clang++ hello.cpp -o hello

这条命令的意思:

编译成功后,目录里会多出一个叫 hello 的可执行文件:

./hello

你会看到程序打印出:

你好,C++!

就这么简单。以后每章的例子,编译命令都长这样:

clang++ -std=c++26 文件名.cpp -o 程序名

加上 -std=c++26 是告诉编译器"用 2026 年标准的语法来理解代码"。 你可以用 -std=c++17 / -std=c++20 / -std=c++23 切换标准版本。

1.3 编译失败怎么办?(这是学习的常态,别怕)

编译器报错是"新手最常遇到的事",也是你最该学会读的东西。 比如你把 println 拼成 printl(少一个 n):

error: no member named 'printl' in namespace 'std'

翻译成人话:std 这个命名空间里没有 printl 这个东西。 你拼错了,或者忘了 include 对应的头文件。

三条心得:

  1. 报错先看"文件名:行号",比如 hello.cpp:3:5 表示第 3 行第 5 列。
  2. 看第一条错误最重要,后面的错误常常是连锁反应。
  3. 编译不通过 → 程序不会生成 → 你运行的还是旧版本。

改完代码必须重新编译!

常见错误对照表:

"unexpected end of file"      —— 少了个大括号 } 
"expected ';' at end of..."   —— 句子结尾少分号 ;
"undeclared identifier"       —— 变量没声明就用(比如拼错名)
"no member named"             —— 命名空间/对象里没有这个东西

1.4 给代码写注释(写给未来的自己)

注释是给人类看的,编译器直接忽略。

// 这是单行注释,// 之后到行尾都是注释
/* 这是
   多行注释 */

好代码不需要很多注释,但关键的地方要有。 注释要说"为什么这样做",不要说"做了什么"——代码本身已经 告诉你它做了什么。

1.5 自己打印点东西

在 <print> 里,有两个常用函数:

std::print("abc");     // 打印 abc,不换行
std::println("abc");   // 打印 abc,然后换行

还可以打印变量的值,用 {} 占位:

int age = 18;
std::println("我今年 {} 岁", age);

{} 是"格式化占位符",运行时会被后面的值替换掉。 这比老式的 << 写法干净多了(老写法见 1.6)。

1.6 老式写法(了解即可,你会在旧代码里见到)

C++23 之前,最常用的是 <iostream> 里的 cout:

#include <iostream>
int main() {
    std::cout << "你好" << std::endl;
    std::cout << "年龄: " << 18 << std::endl;
}

<< 读作"送进去",endl 是换行。 你以后读老项目一定会见到,所以认识它很重要。 但自己写新代码,优先用 print/println。

本章小结

练习题


  1. 打印你自己的名字和年龄,各占一行。
  2. 故意删掉一个分号,编译看看报错,读一读错误信息。
  3. 把 println 改成 print,观察运行结果有什么不同(注意换行)。