本章目标:写一个能跑的程序,理解编译、运行、语法错误。 看完约 5 分钟,请动手敲每一个例子。
一个最简单的完整 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 函数"。 "::" 是作用域运算符,读作"里的"。
把代码保存成文件 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 切换标准版本。
编译器报错是"新手最常遇到的事",也是你最该学会读的东西。 比如你把 println 拼成 printl(少一个 n):
error: no member named 'printl' in namespace 'std'
翻译成人话:std 这个命名空间里没有 printl 这个东西。 你拼错了,或者忘了 include 对应的头文件。
三条心得:
改完代码必须重新编译!
常见错误对照表:
"unexpected end of file" —— 少了个大括号 }
"expected ';' at end of..." —— 句子结尾少分号 ;
"undeclared identifier" —— 变量没声明就用(比如拼错名)
"no member named" —— 命名空间/对象里没有这个东西
注释是给人类看的,编译器直接忽略。
// 这是单行注释,// 之后到行尾都是注释
/* 这是
多行注释 */
好代码不需要很多注释,但关键的地方要有。 注释要说"为什么这样做",不要说"做了什么"——代码本身已经 告诉你它做了什么。
在 <print> 里,有两个常用函数:
std::print("abc"); // 打印 abc,不换行
std::println("abc"); // 打印 abc,然后换行
还可以打印变量的值,用 {} 占位:
int age = 18;
std::println("我今年 {} 岁", age);
{} 是"格式化占位符",运行时会被后面的值替换掉。 这比老式的 << 写法干净多了(老写法见 1.6)。
C++23 之前,最常用的是 <iostream> 里的 cout:
#include <iostream>
int main() {
std::cout << "你好" << std::endl;
std::cout << "年龄: " << 18 << std::endl;
}
<< 读作"送进去",endl 是换行。 你以后读老项目一定会见到,所以认识它很重要。 但自己写新代码,优先用 print/println。
练习题