外观
C 语言
C 语言是一门广泛使用的面向过程高级编程设计语言, 其语法丰富, 且灵活高效, 是当前高性能科学计算和大型软件开发的常用编程语言。 广泛应用于系统编程、嵌入式开发和高性能计算等领域。
主要特点:
- 高效性: 直接操作内存,运行速度快
- 可移植性: 代码可以在不同平台上编译运行
- 结构化编程: 支持函数和模块化编程
- 低级访问: 可以直接操作硬件和内存
Token(令牌)
在 C 语言中,令牌(Token)是程序的基本组成单位,编译器通过对源代码进行词法分析,将代码分解成一个个的令牌。
C 语言的令牌主要包括以下几种类型:
- 标识符(Identifiers)
- 常量(Constants)
- 字符串字面量(String Literals)
- 运算符(Operators)
- 分隔符(Separators)
- 关键字(Keywords)
标识符
用于命名变量、函数、结构体等。标识符必须以字母或下划线开头,后面可以跟字母、数字或下划线。
C 标识符内不允许出现标点字符,比如 @、$ 和 %。
C 是区分大小写的编程语言。
常量
是固定值,在程序执行期间不会改变。包括整型常量、浮点型常量、字符常量、枚举常量等。
c
const int MAX = 100; // 整型常量
const float PI = 3.14; // 浮点型常量
const char NEWLINE = '\n'; // 字符常量1
2
3
2
3
字符串字面量
由双引号括起来的字符序列。字符串末尾会自动添加一个空字符 '\0' 作为结束标志。
c
char greeting[] = "Hello, World!";1
运算符
C 语言中的运算符种类繁多,常见的包括:
- 算术运算符:+, -, *, /, %
- 关系运算符:==, !=, >, <, >=, <=
- 逻辑运算符:&&, ||, !
- 位运算符:&, |, ^, ~, <<, >>
- 赋值运算符:=, +=, -=, *=, /=, %=
- 其它运算符:sizeof, ?:, &, *, ->, .
c
int a = 5, b = 10; // 使用赋值运算符 =
int sum = a + b; // 使用算术运算符 +
int isEqual = (a == b); // 使用关系运算符 ==1
2
3
2
3
分隔符
分隔符用于分隔不同的代码元素,如逗号、分号、花括号等。
在 C 程序中,分号 ; 是语句结束符,也就是说,每个语句必须以分号结束,它表明一个逻辑实体的结束。
c
// 单独的分号也可以作为一个空语句,表示什么都不做
;1
2
2
关键字
关键字是C语言保留给自己用的保留字。不能作为常量名、变量名或其他标识符名称。
基础关键字
- auto 声明自动变量
- break 跳出当前循环
- case 开关语句分支
- char 声明字符型变量或函数返回值类型
- const 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变
- continue 结束当前循环,开始下一轮循环
- default 开关语句中的"其它"分支
- do 循环语句的循环体
- double 声明双精度浮点型变量或函数返回值类型
- else 条件语句否定分支(与 if 连用)
- enum 声明枚举类型
- extern 声明变量或函数是在其它文件或本文件的其他位置定义
- float 声明浮点型变量或函数返回值类型
- for 一种循环语句
- goto 无条件跳转语句
- if 条件语句
- int 声明整型变量或函数
- long 声明长整型变量或函数返回值类型
- register 声明寄存器变量
- return 子程序返回语句(可以带参数,也可不带参数)
- short 声明短整型变量或函数
- signed 声明有符号类型变量或函数
- sizeof 计算数据类型或变量长度(即所占字节数)
- static 声明静态变量
- struct 声明结构体类型
- switch 用于开关语句
- typedef 用以给数据类型取别名
- unsigned 声明无符号类型变量或函数
- union 声明共用体类型
- void 声明函数无返回值或无参数,声明无类型指针
- volatile 说明变量在程序执行中可被隐含地改变
- while 循环语句的循环条件
C99 新增关键字
- _Bool
- _Complex
- _Imaginary
- inline
- restrict
C11 新增关键字
- _Alignas
- _Alignof
- _Atomic
- _Generic
- _Noreturn
- _Static_assert
- _Thread_local
C程序基本结构
简单版:
C
#include <stdio.h> //预处理命令,载入头文件
int main() { //主函数,程序从这里开始执行
/* 我的第一个C程序 */
// 输出Hello World
printf("Hello, World!\n");
// 终止 main() 函数,并返回值 0。
return 0;
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
稍微复杂一点:
c
#include <stdio.h> // 头文件包含
#define PI 3.14159 // 宏定义
// 函数声明
int add(int a, int b);
int main() { // 主函数
// 变量声明
int num1, num2, sum;
// 用户输入
printf("Enter two integers: ");
scanf("%d %d", &num1, &num2);
// 函数调用
sum = add(num1, num2);
// 输出结果
printf("Sum: %d\n", sum);
return 0; // 返回 0 表示程序成功执行
}
// 函数定义
int add(int a, int b) {
return a + b;
}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
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
头文件包含
头文件通常在程序的开头使用 #include 指令包含。 头文件提供了函数和库的声明,如标准输入输出库 <stdio.h>、标准库 <stdlib.h> 等。 它们定义了函数、宏、常量等使程序能够使用预定义的库函数。
宏定义
宏是通过 #define 指令定义的符号常量或代码片段。 宏在编译前由预处理器替换为其定义的内容。常用于定义常量或者复杂的代码块。
函数声明
在 C 语言中,函数的声明必须在函数定义或调用之前。 声明提供了函数的返回类型、函数名和参数列表,以便编译器知道如何调用该函数。
主函数
main() 函数是 C 程序的入口点,每个 C 程序都必须包含一个 main() 函数。 程序从 main() 开始执行,返回值通常为 0 表示程序成功执行。
变量声明
在 C 程序中,所有变量必须在使用前声明。变量可以在 main() 函数中声明,也可以在其他函数中或全局声明。
语句和表达式
语句是 C 程序的基本执行单元,通常是函数调用、赋值、控制语句(如 if、for 等)或表达式。 表达式是由变量、操作符和常量组成的代码片段。
c
printf("Enter two integers: ");
sum = add(num1, num2);1
2
2
控制流语句
控制流语句用于控制程序执行的顺序,包括 if、for、while、do-while 等循环和条件分支语句。
c
if (num1 > num2) {
printf("num1 is greater than num2");
}1
2
3
2
3
函数定义
函数定义包含实际的函数体,它描述了函数的具体实现。函数通常包含参数、局部变量和返回值。
c
int add(int a, int b) {
return a + b;
}1
2
3
2
3
返回语句
return 语句用于终止函数的执行,并将控制权交还给调用函数。main() 函数的返回值通常是 0 表示正常执行。
c
return 0;1
书写规范与最佳实践
书写规范
- 每条语句以分号结束。但预处理命令、函数头和右花括号后不需要分号(结构除外);
- 标识符、关键字之间要有间隔,可以使空格或间隔符(如运算符、括号等);
- C语言区分大小写;
- /* */ 注释一行或多行代码块,不允许嵌套注释;
- // 注释一行代码,允许嵌套注释;
- 一行可以写多个语句,一个语句也可以分几行书写。
最佳实践
- 使用有意义的变量名
- 保持代码简洁和模块化
- 注意内存管理和指针使用
- 编写清晰的注释
- 遵循编码规范
编译和运行
bash
# 编译
gcc hello.c -o hello
# 运行
./hello1
2
3
4
5
2
3
4
5