Skip to content

1.3 第一个程序:Hello World

环境搭建完成后,我们来编写第一个 C++ 程序。按照编程界的传统,从输出一行「Hello, World!」开始。

创建一个名为 hello.cpp 的文件,输入以下内容:

#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}

这段代码虽然只有几行,但包含了 C++ 程序的基本骨架。下面逐行分析。

#include预处理指令(Preprocessor Directive),作用是将指定的头文件(Header File)的内容包含到当前文件中。<iostream> 是 C++ 标准库提供的输入输出流(Input/Output Stream)头文件,包含了 std::coutstd::cin 等常用的输入输出工具。

可以类比为:在正式写作之前,先声明「我需要用到输入输出相关的工具」。

main 函数是每个 C++ 程序的入口点(Entry Point)。程序启动后,操作系统会自动调用这个函数。它的基本形式是:

int main() {
// 程序代码
return 0;
}
  • int 表示函数的返回值类型是整数
  • main 是函数名,这个名字是固定的,不能更改
  • () 表示函数不接受任何参数(后续章节会介绍带参数的形式)
  • {} 花括号内是函数体,包含要执行的代码

std::cout << "Hello, World!" << std::endl;

Section titled “std::cout << "Hello, World!" << std::endl;”

这一行完成了实际的输出工作:

  • std::cout 是标准输出流对象(Console Output),它将数据输出到终端屏幕
  • <<插入运算符(Insertion Operator),将右侧的数据「送入」左侧的输出流
  • "Hello, World!" 是一个字符串字面量(String Literal),用双引号包裹
  • std::endl 表示换行并刷新输出缓冲区
  • 语句末尾的 ; 分号是 C++ 语句的结束标记,不可省略

其中 std::命名空间(Namespace)限定符,表示 coutendl 属于标准库命名空间 std。命名空间的具体概念会在后续章节详细讨论。

return 0 表示程序正常结束。返回值 0 会传递给操作系统,通常约定 0 代表成功,非零值代表出错。

在上述代码中,可能你注意到了 // 程序代码 这样的文字,这就是注释(Comments)。注释是写给程序员看的解释性文字,编译器会自动忽略它们,完全不会影响程序的运行。

C++ 支持两种注释方式:

使用双斜线 // 开始,直到当前行结束的所有内容都会被当作注释:

int age = 18; // 这是一个单行注释,解释了 age 变量的含义
// 这也是单行注释,通常放在代码上方
std::cout << age;

使用 /* 开始,以 */ 结束,之间的所有内容都是注释,可以跨越多行:

/*
这是一个多行注释的例子。
通常用于详细的模块说明、复杂的逻辑解释,
或者在调试时暂时停用一大段代码。
*/
int score = 100;

小贴士:养成写标准注释的好习惯是非常重要的。好代码本身应该具有可读性(即所谓的“代码即文档”),但注释能帮助说明“为什么这么做”(Why),而不仅仅是“这是什么”(What)。

问:每行代码末尾都需要分号吗?

不是所有行都需要。预处理指令(以 # 开头的行)不需要分号,函数定义的花括号 } 后面也不需要。需要分号的是语句(Statement),比如变量声明、函数调用、返回语句等。

问:std:: 写起来太麻烦,能省略吗?

可以在文件开头添加 using namespace std;,之后就可以直接写 coutendl。但在较大的项目中,这种做法可能引发命名冲突,因此本书的示例代码统一保留 std:: 前缀。