C 基础语法
C 基础语法(重构升级版)
🎯 学习目标
- 掌握 C 语言的基本组成单位(Token)及其分类。
- 理解 C 程序的结构、语法规则和编译流程。
- 能够正确使用变量、常量、表达式、控制流等基本元素。
- 熟悉 CLion 开发环境中编写、调试和运行 C 程序的完整流程。
- 打好扎实基础,为后续学习函数、数组、指针、结构体等复杂内容做好准备。
🔑 核心重点
C 程序由 Token 构成,理解词法单元是掌握语法结构的第一步;掌握语法规范与常见陷阱,才能写出高质量代码。
详细讲解
1. C 程序的基本结构与入口函数 main
所有 C 程序都从 main() 函数开始执行。
#include <stdio.h> // 引入标准输入输出库
int main() {
printf("Hello, CLion!\n");
return 0;
}
📌 说明:
#include是预处理指令,用于引入头文件。printf()是标准库函数,用于输出信息到控制台。return 0;表示程序正常结束(非零通常表示异常)。
2. Token 分类与词法分析基础
Token 是源码被编译器识别后的最小有意义单元。
常见 Token 类型:
| 类型 | 示例 |
|---|---|
| 关键字(Keywords) | int, if, while, return |
| 标识符(Identifiers) | main, count, sum |
| 常量(Constants) | 123, 3.14, 'A', 0x1F |
| 字符串字面量(String Literals) | "Hello, World!" |
| 运算符(Operators) | +, -, *, /, ==, && |
| 分隔符(Separators) | (, ), {, }, ,, ; |
📌 示例解析:
int x = 10 + 5;
会被拆分为如下 Token 序列:
int → keyword
x → identifier
= → operator
10 → integer constant
+ → operator
5 → integer constant
; → separator
3. 标识符命名规则
标识符用于命名变量、函数、宏等。
✅ 合法:
myVar
_count
value_1
❌ 非法:
1value // 数字开头
my-var // 包含非法字符 -
int // 使用了关键字
📌 注意:
- 区分大小写(如
count和Count不同) - 避免使用
_开头或两个连续下划线(可能与系统宏冲突)
4. 关键字(Keywords)
C99 标准有 32 个关键字,C11 新增部分扩展关键字,共 44 个。
常见关键字列表(C99):
auto break case char const continue default do
double else enum extern float for goto if
int long register restrict return short signed sizeof
static struct switch typedef union unsigned void volatile
while
📌 说明:
- 所有关键字都是小写。
_Bool,_Complex,_Imaginary是 C99 新增的类型关键字。
5. 数据类型与变量声明
C 支持多种基本数据类型:
| 类型 | 示例 |
|---|---|
| 整型 | int, short, long |
| 浮点型 | float, double |
| 字符型 | char |
| 指针型 | int*, char* |
| 枚举型 | enum |
| 结构体/联合 | struct, union |
📌 声明与初始化:
int age = 25;
float price = 9.99f;
char grade = 'A';
const double PI = 3.1415926535;
6. 常量与字符串字面量
常量:
- 整数常量:
123,0xFF,077 - 浮点常量:
3.14,6.02e23 - 字符常量:
'A','\n','\x41' - 枚举常量:
enum { RED, GREEN };
字符串字面量:
"Hello"
"Hello\nWorld"
"\u4E2D\u6587" // Unicode 字符(需支持 C11)
📌 注意:
- 字符串以
\0结尾。 - 可拼接多个字符串:
"Hello, " "World"等价于"Hello, World"
7. 控制结构(顺序、分支、循环)
分支结构 —— if...else
int score = 85;
if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
多重条件判断 —— switch
int day = 3;
switch (day) {
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
default: printf("Unknown\n");
}
循环结构 —— for, while, do...while
// for 循环
for (int i = 0; i < 5; i++) {
printf("%d ", i);
}
// while 循环
int i = 0;
while (i < 5) {
printf("%d ", i);
i++;
}
// do while 至少执行一次
int j = 0;
do {
printf("%d ", j);
j++;
} while (j < 5);
⚠️ 注意事项
- 避免未定义行为:例如
i = i++是未定义行为。 - 注意空格与换行不影响 Token 分割,但会影响可读性。
- 保留关键字不建议自定义宏覆盖,比如
#define int char是危险做法。 - 避免使用过长的表达式,影响可维护性和可读性。
- 不要混淆
=和==:赋值 vs 判断。
🧪 实际案例分析
案例 1:BMI 计算器(完整项目练习)
#include <stdio.h>
int main() {
double weight, height, bmi;
printf("请输入您的体重(kg): ");
scanf("%lf", &weight);
printf("请输入您的身高(m): ");
scanf("%lf", &height);
bmi = weight / (height * height);
printf("您的BMI为: %.2f\n", bmi);
if (bmi < 18.5)
printf("体重过轻\n");
else if (bmi < 24)
printf("正常范围\n");
else if (bmi < 28)
printf("超重\n");
else
printf("肥胖\n");
return 0;
}
📌 说明:
- 综合运用变量、输入输出、运算符、控制结构。
- 输出格式化保留两位小数。
- 是一个贴近生活的完整小程序,适合练习。
案例 2:Token 解析练习
给定以下代码片段,请列出所有 Token 并标注其类型:
unsigned long long total = 0xFFFFFFFF;
if (total > 1000) printf("Over limit");
🔍 解析(节选):
第一行 Token 分析:
unsigned → keyword
long → keyword
long → keyword(注意:这是 C 的合法语法)
total → identifier
= → operator
0xFFFFFFFF → integer constant
; → separator
🧩 拓展练习
练习 1:Token 分类练习
给定以下代码片段,请列出所有 Token 并标注其类型:
int result = MAX(2 + 3, 4);
练习 2:宏展开调试
编写一个宏 SQUARE(x) 计算平方,测试以下调用:
SQUARE(i++)
观察输出,解释为何结果不符合预期,并修复该宏。
练习 3:构造非法标识符
尝试命名以下变量,指出哪些是非法的,并说明原因:
1var
_myVar
int
new-value
MAX_SIZE
📚 推荐阅读
- 《The C Programming Language》第2版(K&R)
- C 语言之父写的经典教材,简洁有力,适合进阶阅读。
- 《C: A Reference Manual》第5版
- C 语言权威参考手册,涵盖 C99 和 C11 标准。
- 《C Primer Plus》第6版中文版
- 适合系统性入门,内容详尽,例子丰富。
🧭 下一步建议
完成本章后,建议:
- 在 CLion 中创建一个新的 C 项目,实践本章所学内容。
- 尝试实现一个小工具,如简易计算器或 BMI 分析器。
- 下一章将进入《C 数据类型与内存模型》,深入理解变量在内存中的表示方式,为指针和性能优化打下基础。
是否需要我为你生成配套的 Token 分析练习模板、CLion 项目结构说明,或是进入下一章《数据类型与内存模型》?还是想让我推荐一些适合动手实践的小项目?

浙公网安备 33010602011771号