返回:安全开发篇(一)目录 · 上一篇:004、C 语言程序架构 · 下一篇:006、include 预处理指令

对应视频:1.4 基础-注释方式.mp4

1、学习目标

这一节学习 C 语言的注释方式。注释不参与编译,也不会改变程序执行结果,但会影响代码后续能不能被自己和别人读懂。

需要掌握:

  1. 单行注释;
  2. 多行注释;
  3. 行尾注释;
  4. 注释应该写什么;
  5. 安全开发实验中如何记录关键观察。

2、单行注释

单行注释从 // 开始,到当前行结束。

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main(void)
{
// 输出提示信息
printf("Hello\n");

return 0;
}

单行注释适合解释一行代码、一个变量或一个短逻辑。

3、多行注释

多行注释用 /* */ 包围。

1
2
3
4
5
6
7
8
9
10
11
12
13
/*
这个程序用于观察最小 C 程序结构:
1. 引入头文件
2. 进入 main 函数
3. 输出字符串
*/
#include <stdio.h>

int main(void)
{
printf("Hello\n");
return 0;
}

多行注释适合记录模块说明、实验目的、调试结论或复杂逻辑。

4、行尾注释

1
2
int max_count = 10;  // 最多尝试次数
printf("%d\n", max_count);

行尾注释要短,不要把很长的说明塞在同一行,否则代码会很乱。

5、注释写什么

好的注释不重复代码表面意思,而是解释原因、边界和风险。

不推荐 推荐
i++; // i 加 1 i++; // 进入下一轮扫描
return 0; // 返回 0 return 0; // 程序正常结束
char buf[16]; // 字符数组 char buf[16]; // 只允许保存 15 个字符和结尾 \0

注释最有价值的地方,是帮未来的自己记住当时为什么这样写。

6、安全开发中的注释习惯

安全开发学习里,注释可以记录一些和漏洞、边界、内存相关的信息。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(void)
{
// 预留 16 字节,最后 1 字节用于字符串结束符 '\0'
char name[16] = {0};

// 注意:真实项目中输入必须限制长度,避免写出数组边界
printf("name: ");

return 0;
}

可以重点注释:

  1. 缓冲区大小;
  2. 指针是否可能为空;
  3. 输入长度是否检查;
  4. 函数返回值是否需要判断;
  5. 某个写法只是实验,不适合生产环境。

7、常见问题

7.1 注释会影响程序性能吗?

不会。注释在编译前会被处理掉,不参与程序运行。

7.2 注释越多越好吗?

不是。注释应该解释代码意图、边界和原因。重复代码表面含义的注释太多,反而会降低可读性。

7.3 多行注释能嵌套吗?

C 语言的 /* */ 多行注释通常不能直接嵌套。嵌套后容易导致注释提前结束,引发编译错误。

8、复盘题

8.1 // 和 /* */ 有什么区别?

// 是单行注释,只影响当前行从 // 到行尾的内容;/* */ 是多行注释,可以跨越多行,直到遇到结束符 */。

8.2 安全开发实验里为什么要记录缓冲区大小?

因为数组和字符串的边界是很多内存问题的来源。记录缓冲区大小可以提醒自己后续输入、复制和拼接时检查长度。

8.3 注释应该解释“是什么”还是“为什么”?

优先解释“为什么”。代码本身已经表达了“做什么”,注释更应该补充设计意图、边界条件、风险和实验结论。

这一节的关键不是会写注释符号,而是建立“给未来复盘留线索”的习惯。