【C语言】深入理解注释

简介: 我们知道一个源文件要变成可执行程序的话,首先要经过预处理,预处理阶段完成的任务包括:头文件展开、宏替换、条件编译、去掉注释。

一. 预处理阶段对注释的处理

我们知道一个源文件要变成可执行程序的话,首先要经过预处理,预处理阶段完成的任务包括:头文件展开、宏替换、条件编译、去掉注释。


那具体是怎么去掉注释的呢?下面我们写一段包含注释的代码来测试:


// tes.c
#include <stdio.h>
int main()
{
  int /*    */ i = 10;
  // this is a
  // valid comment
  in/*   */t j = 20;
  return 0;
}


下面我们对源文件进行预处理操作:gcc -E test.c -o test.i,生成一个叫做 test.i 的文件,打开文件可以看到预处理后的代码:


a4cc5a78529d4791b87a7c3f31a52256.png

二. 注释使用时的注意事项

1. C风格的注释无法嵌套使用

C风格的注释:/* */

C++风格的注释://

下面C风格注释的使用是错误的,/*和*/不能嵌套使用,因为/*总是与离它最近的*/匹配:


#include <stdio.h>
int main()
{
  /*
  /*printf("hello world");
  printf("hello world");*/
  */
  return 0;
}


2. 基本注释注意事项

#include <stdio.h>
int main()
{
  int /* */ i; // 正确
  in/* */t j;  // 报错,因为预处理后注释会被替换成空格
  // 正确,此时的//不算作注释
  // 因为它在双引号里面
  // 编译器会优先把它识别为字符串的一部分
  char *s = "abcdefgh //hijklmn"; 
  return 0;
}


3. 注释导致的二义性

下面是测试代码:


#include <stdio.h>
int main()
{
  int x = 10;
  int y = 0;
  int *p = &y;
  y = x/*p;
  return 0;
}


编译后会在这里报错y = x/*p,因为 / 会优先与 * 结合作为一个注释符号。正确的写法应该是在 / 后面加上一个空格或者对 *p 加上一个括号。


// 正确的写法
y = x/ *p;
y = x/(*p);


四. 关于注释的一个使用建议

复杂的函数中,会有很多分支、循环的嵌套,如果它们的行数也有很多的话,我们在阅读的时候容易搞混,不知道哪个循环或分支从哪里开始或者是从哪里结束。


所以建议在分支语句、循环语句结束之后加上注释,这样方便区分各分支或循环体。


e206d81185a94317879d93640e23d905.png

相关文章
|
11月前
|
程序员 编译器 C语言
【C语言入门】C语言常见基础必懂概念(五)注释
【C语言入门】C语言常见基础必懂概念(五)注释
81 0
|
2月前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
508 6
|
3月前
|
存储 数据可视化 C语言
【C语言】C语言-身份证管理系统(源码+注释)【独一无二】
【C语言】C语言-身份证管理系统(源码+注释)【独一无二】
|
4月前
|
前端开发 C语言
C语言08----注释扩展知识点,注释快捷键:ctrl+k,ctrl + C,取消快捷键 ctrl + K,ctrl + U
C语言08----注释扩展知识点,注释快捷键:ctrl+k,ctrl + C,取消快捷键 ctrl + K,ctrl + U
|
4月前
|
前端开发 C语言
C语言07-注释基本使用
C语言07-注释基本使用
|
5月前
|
算法 编译器 C语言
C语言注释的使用与理解
C语言注释的使用与理解
|
5月前
|
编译器 C语言
【C语言基础篇】注释
【C语言基础篇】注释
|
6月前
|
C语言 C++
每天一道C语言编程:(去掉:双斜杠注释,去掉空格)
每天一道C语言编程:(去掉:双斜杠注释,去掉空格)
36 0
|
6月前
|
算法 程序员 编译器
【C语言】注释
【C语言】注释
193 2
|
6月前
|
C语言 计算机视觉
C语言贪吃蛇(有详细注释)
C语言贪吃蛇(有详细注释)
41 0