程序结构

1
2
3
4
5
6
7
8
9
10
#include <iostream>  // 引入库(iostream为标准库[内置库])
using namespace std; // 命名空间

// main()程序入口; int整型返回值的函数
int main()
{
// cout 标准库输出流对象; endl 输出换行符并刷新输出流; << 流插入运算符
cout << "Hello World" << endl; // 输出 Hello World
return 0; // 对应函数定义的int main(),返回整型
}

编译链接过程

编译(Compile)和链接(Link)是把源代码转换成可执行文件的过程。无论是C还是C++,源文件都要被编译为中间代码文件(目标文件Object
file)。
在Windows系统中为.obj文件,在UNIX下则为.o文件。编译完成后,将目标文件和成为可执行文件的过程叫做链接。

编译

编译工具: gcc(c语言) 和 g++(c++语言/c语言)
P.S.:对于Windows系统,gcc组件被移植为MinGW

链接

链接主要是链接函数和全局变量,不管函数的源文件,只管它们的目标文件。要是在指明的目标文件中,链接器找不到函数的实现语句,就会报出链接错误(
linker error)。

g++执行过程

通常情况下有四步:

  1. 预处理: 条件编译,头文件包含,宏替换。
  2. 编译: 预处理后的文件转换成汇编语言。
  3. 汇编: 产生目标文件。
  4. 链接: 链接目标文件,生成可执行程序。(.out in Linux; .exe in Windows)

编译相关文件

文件扩展名 描述
.a 打包目标文件的库文件
.c/.C/.cc/.cp/.cpp/.cxx/.c++ 源代码文件,函数和变量的定义/实现
.h 头文件,函数和变量的声明
.ii 编译预处理产生的文件
.o (.obj in Windows) 编译产生的中间目标文件
.s 编译产生的汇编语言文件
.so 编译产生的动态库文件
.out (.exe in Windows) 链接目标文件产生的可执行文件

常用基本命令

g++ hello.cpp -o hello # 生成hello可执行程序,-o选项为指定可执行程序文件名(Windows hello.exe)
./hello # 运行生成的程序(Windows .\hello.exe)

P.S.

更细节可查看文章:C/C++编译过程

语句和语句块

语句

分号;为语句结束符,代表一个逻辑实体结束。每个语句必须以分号结束。

语句块

一组使用大括号括起来的按照逻辑连接的语句。如下:

1
2
3
4
{
cout << "hello" << endl;
return 0;
}

标识符

标识符以字母 A-Za-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)
C++ 标识符内不允许出现标点字符,比如 @&%
C++ 是区分大小写的编程语言。

关键字

这些关键字(保留字)不能作为常量名、变量名或其他标识符名称。
C++关键字介绍

其他常用概念(了解即可,后续会不断出现)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// C++ 常用基本概念

// 1. 变量 (Variable)
// 变量是存储数据的基本单位。在 C++ 中,变量在使用之前必须声明其类型。
int age; // 声明一个名为 age 的整数类型变量
age = 25; // 给变量 age 赋值

// 2. 变量类型 (Data Types)
// 变量类型决定了变量能存储什么类型的数据。常见的变量类型包括:

// - 基本数据类型:
int x = 10; // 整数类型
float pi = 3.14; // 单精度浮点数
double y = 3.141592653589793; // 双精度浮点数
char letter = 'A'; // 字符类型
bool flag = true; // 布尔类型

// - 派生数据类型:
// 数组类型
int arr[5] = {1, 2, 3, 4, 5};
// 指针类型
int *ptr = &age; // 指向变量 age 的指针
// 引用类型
int &ref = age; // 引用类型,ref 是 age 的别名

// - 空类型:
// void 用来表示无类型
void myFunction() {
// 空函数,返回类型为 void
}

// 3. 常量 (Constant)
// 常量是其值在程序执行过程中不可修改的量。常量通常在程序中定义之后就不能更改。
const int maxScore = 100; // maxScore 是一个常量,值为 100

// 4. 修饰符类型 (Type Modifiers)
// C++ 提供了一些修饰符来修饰基本数据类型,扩展它们的功能或改变它们的存储范围:

unsigned int a = 50; // 无符号整数
short int b = 32000; // 短整型
long int c = 1000000; // 长整型
long long int d = 5000000000; // 更长的整数类型
long double pi_approx = 3.14159265358979323846; // 长双精度浮点数

// 5. 常用的关键字
// - auto:让编译器自动推导变量类型(可以减少代码的冗余)。
auto num = 42; // 编译器自动推导为 int 类型

// - typedef / using:用于定义类型别名。
typedef unsigned int uint; // 定义 uint 为 unsigned int 类型的别名

// 6. 变量作用域
// C++ 中的变量具有作用域,意味着变量在某一部分代码中是有效的,而在其它地方不可用。

// 局部变量
void exampleFunction() {
int localVar = 5; // 只在该函数中有效
}

// 全局变量
int globalVar = 100; // 可以在整个程序中访问

// 形式参数(形参)
// 在函数参数中声明变量

// 7. 初始化 (Initialization)
// 在声明变量时给它赋一个初始值,通常我们会在声明时就初始化变量,否则它们的值可能会是垃圾值。
int a = 10; // 初始化时给 a 赋值 10

// 8. 常量(字面量)
// 可以是任何数据类型,程序执行期间不会改变。固定值。
// 两种定义方式
// #define identifier value
#define LENGTH 10

//const type variable = value
const int LENGTH = 10;