【C语言】深入理解注释

2023-05-16

文章目录

  • 一. 预处理阶段对注释的处理
  • 二. 注释使用时的注意事项
    • 1. C风格的注释无法嵌套使用
    • 2. 基本注释注意事项
    • 3. 注释导致的二义性
  • 四. 关于注释的一个使用建议

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

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

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

// 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 的文件,打开文件可以看到预处理后的代码:
在这里插入图片描述

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

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);

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

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

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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言】深入理解注释 的相关文章

随机推荐

  • 交叉编译概念及交叉编译工具链的安装

    1 交叉编译是什么 xff0c 为什么要交叉编译 是什么 xff1f 交叉编译 xff1a 是在一个平台上生成另一个平台上的可执行代码 我们在windows上面编写C51代码 xff0c 并编译成可执行代码 xff0c 如xx hex 是在
  • 完成一个SpringBoot项目——员工管理系统

    SpringBoot项目 员工管理系统 该系统为一个springboot项目 员工管理系统的代码 xff0c 前端使用的模板是thymeleaf xff0c 数据写在了dao层 xff0c 没有用数据库 xff0c 完全可以实现增删改查 目
  • 通信术语及综合题

    ITU xff1a International Telecommunication Union国际电信联盟 xff0c 联合国的一个重要专门机构 xff0c 也是联合国机构中历史最长的一个国际组织 简称 国际电联 电联 或 ITU IMT
  • VS2013的Visual C++ 项目如何修改目标框架和平台工具集

    https msdn microsoft com zh cn library ff770576 aspx 如何 xff1a 修改目标框架和平台工具集 Visual Studio 2013 其他版本 可以更改 Visual C 43 43 项
  • Java类继承中的静态块与构造

    span class hljs comment 创建一个父类 span span class hljs class span class hljs keyword class span span class hljs title Super
  • node(express脚手架)+html(jquery模板)

    上代码 html部分 span class token operator lt span span class token operator span span class token constant DOCTYPE span html
  • Ubuntu 使用技巧备忘

    Ubuntu 使用技巧备忘 xff08 持续更新 xff09 小白向 xff0c 备忘 xff0c Ubuntu 20 04版本 Ubuntu 使用技巧备忘 xff08 持续更新 xff09 Ubuntu 使用技巧备忘 xff08 持续更新
  • c语言阶乘的累加和

    c语言 阶乘的累加和 题目描述 求1 43 2 43 n 输入 输入一个整数n xff0c 你可以假定n不大于10 输出 输出一个整数 xff0c 即阶乘累加的结果 xff0c 单独占一行 样例输入 4 样例输出 33 代码如下 span
  • 位运算骚操作---利用位运算求组合数

    文章目录 一道利用组合求和的例题位运算如何实现组合的呢 xff1f 解题代码 一道利用组合求和的例题 这道题乍一看就是把所有的组合给列举出来 xff0c 然后求和看是否等于目标值 xff0c 输出需要注意的是优先输出靠前的下标元素 xff0
  • 普联(TP-LINK)的无线网卡在Linux下如何使用

    xff08 如果这篇文章对你有所帮助 xff0c 请为我点个赞 xff0c 要问我点赞有什么作用 xff0c 嘿嘿 xff0c 只是为了我的心情愉悦 xffe3 xffe3 xff09 之前入手了一款普联的无线网卡 xff0c 型号是TL
  • 【C语言】判断素数的函数

    文章目录 一 函数描述二 素数定义三 函数实现 一 函数描述 自定义一个函数 xff0c 传入一个整数n xff0c 判断是否为素数 若是返回1 xff0c 否则返回0 二 素数定义 素数又称质数 一个大于1的自然数 xff0c 除了1和它
  • 【C语言】判断闰年的函数

    文章目录 一 函数描述二 相关说明三 函数实现 一 函数描述 自定义一个函数 xff0c 传入一个年份n xff0c 判断是否为闰年 若是返回1 xff0c 否则返回0 二 相关说明 平年二月28 xff0c 闰年二月29 平年有365天
  • 【C语言】求n的阶乘(递归法和循环法)

    文章目录 一 循环法二 递归法 一 循环法 根据阶乘的计算方法 xff1a n xff01 61 1 2 3 n xff0c 我们在一个for循环完成 n 次乘法运算 注意因为是连乘 xff0c 最终阶乘结果可能会非常大所以我们在Fac函数
  • 【C语言】数组排序方法总结

    一 冒泡排序 相邻元素两两比较 xff0c 按照要求交换位置 xff0c n个元素一共要比较n 1趟 xff0c 每趟要两两比较未排序元素个数 1次 span class token macro property span class to
  • 【C语言】通讯录实现

    通讯录功能 添加联系人信息 xff08 名字 xff0c 性别 xff0c 年龄 xff0c 电话号码 xff0c 家庭住址 xff09 输出指定联系人信息查找指定联系人信息修改指定联系人信息打印所有联系人信息对所有联系人 xff08 通过
  • 如何把64GB或以上的SD卡格式化为FAT32的格式

    对于64GB或以上的SD卡或U盘 xff0c Windows系统自带的格式化工具只支持格式为exFAT或NTFS格式 但事实上 xff0c FAT32最大可以支持2TB的分区 通过第三方分区工具也支持把64GB或以上的SD卡或U盘格式化成F
  • 【Linux】线程基础知识

    文章目录 一 什么是线程 xff1f 1 线程概念2 重新理解进程3 线程优缺点4 线程周期5 线程调度6 线程工作原理7 线程异常8 线程资源 二 为什么要有线程 xff1f 三 如何控制线程 xff1f 1 Linux支持的POSIX线
  • 【MySQL】数据库基础知识

    文章目录 一 什么是数据库二 为什么要有数据库三 数据库分类四 数据库的基本使用1 MySQL安装2 检查MySQL后端服务器是否启动3 连接MySQL服务器4 服务器 xff0c 数据库 xff0c 表关系5 数据存储逻辑 五 MySQL
  • 【C语言】typedef关键字

    文章目录 一 使用介绍1 对一般类型进行重命名2 对结构体类型进行重命名3 对指针进行重命名4 对数组进行重命名 二 typedef 和 define 的区别 一 使用介绍 typedef 的作用就是对类型进行重命名 xff0c 具体作用在
  • 【C语言】深入理解注释

    文章目录 一 预处理阶段对注释的处理二 注释使用时的注意事项1 C风格的注释无法嵌套使用2 基本注释注意事项3 注释导致的二义性 四 关于注释的一个使用建议 一 预处理阶段对注释的处理 我们知道一个源文件要变成可执行程序的话 xff0c 首