C语言中的3种注释方法

C语言中的3种注释方法

2021年8月28日星期六·席锦

在用C语言编程时,常用的注释方式有如下几种:

(1)单行注释 // …

(2)多行注释 /* … */

(3)条件编译注释 #if 0…#endif

(1)(2)在入门教程中比较常见。

对于(1) 【单行注释 // …】,注释只能显示在一行内,通常出现在一条语句的右边或者上方,对于注释符【//】,一个注释里只要有多于2个【/】都可以,例如:

#include <stdio.h>

int main(void)

{

 

此处四个/仍能成功编译通过,因为//后面和它在同一行的//的内容均为注释内容

printf("语句1\n"); 注释

 

printf("语句2\n");

// printf("语句3\n");

printf("语句4\n");

 

return 0 ;

}

运行截图如下:

但是(1) 【单行注释 // …】只能适用几行代码的注释,如果说面对100行、1000行等代码注释,那岂不是累死人。当你想注释一大串代码时,可能你会马上想到(2)【多行注释 /* … */】。

  

对于(2)【多行注释 /* … */】,不能嵌套使用,正如【if…else】中的【else】总是和离它最近的【if】配对一样,【/*】总是和离它最近的【*/】相配对。例如:

#include <stdio.h>

int main(void)

{

printf("语句1\n");

printf("语句2\n");

printf("语句3\n");

 

/*

printf("语句4\n");

printf("语句5\n");

printf("语句6\n");

printf("语句7\n");

*/

 

printf("语句8\n");

 

// /*printf("语句9\n");/*示范嵌套注释的错误,打开本行头部的//,将编译失败*/*/

 

return 0 ;

}

运行截图如下:

(2)【多行注释 /* … */】确实很方便,但是问题来了,这个注释方式是不能嵌套的,可能自己的小程序小工程没有感觉,但是面对大工程来说,在使用【/* … */】时候,中间也有存在【/* … */】这样的注释,结果会引发一系列的错误。这个注释方式不能查看代码格式和高亮显示关键字的,不利于阅读和调试代码。

针对(1)【单行注释 // …】和(2)【多行注释 /* … */】各自的缺陷,资深的程序员提出(3)【条件编译注释 #if 0…#endif】,该注释的好处是能注释大块的程序,并且没有嵌套的限制,也就是说在【#if 0…#endif】的【…】处可以有【//】或【/* … */】这样的注释,也能保持代码的格式和高亮显示。例如:

#include <stdio.h>

int main(void)

{

printf("语句1\n");

printf("语句2\n");

 

#if 0

printf("语句3\n");

printf("语句4\n");

// printf("语句5\n");

/*

printf("语句6\n");

printf("语句7\n");

*/

#endif

 

printf("语句8\n");

 

return 0 ;

}

【#if 0】与【#endif】之间的代码会被注释掉。对于使用【#if 0…#endif】的开发者,在他想恢复该代码段时,只需要将【#if 0】改成【#if 1】即可,这种注释非常适合于代码的调试和测试。【#if 0】改成【#if 1】后的运行结果如下图:

       【#if 0】运行结果   

       【#if 1】运行结果

根据(3)【条件编译注释 #if 0…#endif】进行扩展学习

#if 0,#else,#endif 语句 】或【#if 1,#else,#endif语句】,例如:

#include <stdio.h>

int main(void)

{

#if 1

printf("语句1\n");

#else

printf("语句2\n");

#endif

return 0 ;

}

此时printf("语句2\n");的语句被注释掉了,永远没有办法执行,而printf("语句1\n");是被编译的;

如果将【#if 1】变为【#if 0】,printf("语句2\n");被编译,而printf("语句1\n");永远没有办法被执行。

运行截图如下:

     

【#if 1】运行结果                 【#if 0】运行结果

预处理嵌套使用,例如:

#include <stdio.h>

int main(void)

{

#if 1

printf("语句1\n");

#if 0

printf("语句2\n");

#endif

#if 1

printf("语句3\n");

#endif

#if 0

printf("语句4\n");

#endif

#endif

return 0 ;

}

运行截图如下:

每一【#if 0】或者【#if 1】都是要有一个【#endif】去匹配,少一个也不行,而且也是按照就近原则的方式去匹配。

预处理也可以使用【#if…#elif#else#endif(类似于if() {}else if() {}else {})例如:

#include <stdio.h>

#define a 2

int main(void)

{

#if (0==a)    // 条件值要在预编译阶段就能确定的值,不能时运行时才能确定的值

printf("语句1\n");

#elif (1==a)

printf("语句2\n");

#elif (2==a)

printf("语句3\n");

#else

printf("语句4\n");

#endif

return 0 ;

}

运行截图如下:

条件值要在预编译阶段就能确定的值,不能时运行时才能确定的值

另有如下几点值得C语言程序员注意:

 (1)注释并不是可以出现在程序的任何地方

 (2)合理的注释通常出现在一条语句的上方或者右边,不应出现在一条语句或者一个程序段的后面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/111319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 下使用 Docker 安装 MySQL

1、下载 mysql docker pull mysql:5.7.362、启动 mysql docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD123456 \ -d mysql:5.7.36命令解…

【VR】【Unity】如何调整Quest2的隐藏系统时间日期

【背景】 网络虽然OK&#xff0c;但是Oculus Quest要连上商店还必须调整好系统时间&#xff0c;不过在Quest系统中&#xff0c;时间对用户是不可见的&#xff0c;本篇介绍调整的方法。 【方法】 打开SideQuest&#xff0c;没有的话先去下载一个。打开后先登录&#xff0c;如…

安装宝塔面板(详细教程)

一、简介 宝塔面板是一款简单好用的服务器运维面板。它支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。对于新手用云服务器来建站的话&#xff0c;宝塔面板是一个非常好用的工具。 宝塔官网&#xff1a;https://www.bt.cn/new/index.html 二、宝…

HZOJ-322: 程序自动分析

题目描述 ​ 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。 ​ 考虑一个约束满足问题的简化版本&#xff1a;假设 x1,x2,x3,…&#xfffd;1,&#xfffd;2,&#xfffd;3,… 代表程序中出现的变量&#xff0c;给定n&#xfffd;个形如xixj&#x…

万物归宗系列01-html基本语法

万物归宗系列&#xff0c;即什么都懂一点系列。 HTML是标签语言&#xff0c;一般成双成对。 Hypertext Markup Language&#xff1a;超⽂本标记语⾔。是⽤来制作⽹页的⼀种标记语⾔。 1 基本框架 <!DOCTYPE html> <html lang"en"> <head><meta…

Linux命令(103)之wc

linux命令之wc 1.wc介绍 linux命令wc是用来统计文件的字数、行数和字节数 2.wc用法 wc [参数] [filename] wc参数 参数说明-l统计总行数&#xff0c;备注&#xff1a;常用于查看进程是否启动-L统计最长一行的字符数-c统计字节数-m统计字符数-w统计单词数 3.实例 3.1.统计…

Pytorch训练深度强化学习时CPU内存占用一直在快速增加

最近在用MATD3算法解决多机器人任务&#xff0c;但是在训练过程中&#xff0c;CPU内存一直在增加&#xff08;注意&#xff0c;不是GPU显存&#xff09;。我很头疼&#xff0c;以为是算法代码出了问题&#xff0c;导致了内存泄漏&#xff0c;折腾了1天也没解决。后来用memory_p…

057:mapboxGL中layout,paint等属性的函数表达说明

第057个 点击查看专栏目录 本篇文章是mapbox的layer中layout,paint等属性的函数表达 mapbox中 Function 是什么 函数 Function 可以作为其 layout布局类属性和 paint 绘制类属性的属性值。在使用 Function 作为属性值时,实际上是一个对象。 layers的3种函数类型 Function …

根据SpringBoot Guides完成进行示例学习(详细步骤)

目录 1.打开Spring | Guides官网&#xff0c;或者直接搜索springboot都可 2.选择要学习的内容 3.根据提示的网址&#xff0c;Git到本地 4.将文件用IDEA打开&#xff0c;根据教程完成示例&#xff0c;这里不做细致讲解 5.运行项目 6.在终端查看运行结果 以Scheduling Task…

call函数和apply函数的区别

call和apply是 JavaScript 中的两个函数方法&#xff0c;用于调用函数并指定函数内部的this值以及传递参数。它们的主要区别在于参数的传递方式。 call方法&#xff1a;call方法允许你在调用函数时&#xff0c;显式地指定函数内部的this值和参数列表。它的语法为&#xff1a; …

Apollo的搭建

Apollo的搭建 1.环境准备 jdk : 1.8 mysql 5.6.5 2.下载 两种方式&#xff1a; a.下载源码自己编译&#xff08;需要修改源码的可以选择&#xff09; 源码&#xff1a;https://github.com/ctripcorp/apoll b.编译好的直接使用 地址&#xff1a;Releases apol…

集成测试规范

集成测试是指将所有模块或组件组合在一起&#xff0c;测试整个系统是否符合预期的功能和性能要求。以下是一个简单的集成测试模板&#xff0c;可以根据具体的测试需求进行修改和扩展&#xff1a; 1. 测试计划 a. 测试范围&#xff1a;测试的模块或组件&#xff0c;以及需要覆…

卷王问卷考试系统SurveyKing,开源调查问卷和考试系统源码

卷王问卷考试系统/SurveyKing是一个功能最强大的开源调查问卷和考试系统&#xff0c;可以快速部署&#xff0c;并适用于各行业。该系统提供了在线表单设计、数据收集、统计和分析等功能&#xff0c;支持20多种题型&#xff0c;多种创建问卷方式和多种问卷设置。 无论您是需要进…

力扣刷题 day49:10-19

1.二进制手表 二进制手表顶部有 4 个 LED 代表 小时&#xff08;0-11&#xff09;&#xff0c;底部的 6 个 LED 代表 分钟&#xff08;0-59&#xff09;。每个 LED 代表一个 0 或 1&#xff0c;最低位在右侧。 例如&#xff0c;下面的二进制手表读取 "4:51" 。 给你…

centos 7.9 安装python 3.10的tls问题,

本地开发升级成了py3.10.6,服务器测试时安装py3.10.4 发现无法正常使用pip3 pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 印象中py3的高版本依赖高版本的openssl,centos 7下默认的openssl为1.0.x, 问题很简…

异步加载JS的方法

异步加载 JavaScript (JS) 文件是提高网页性能的一种常用技术&#xff0c;这样可以使页面在等待 JS 文件加载和执行时不会阻塞。以下是一些异步加载 JS 的方法&#xff1a; 使用 <script> 标签的 async 属性 通过将 <script> 标签的 async 属性设为 true&#xf…

Java后端开发(六)-- 二维码的生成

目录 1. 需要的jar导入 2. ConvertToMultipartFile类 3. QRCodeUtil(二维码工具类) 4.示例演示: 1. 需要的jar导入 <!-- 生成二维码 --><dep

Linux Docker图形化工具Portainer如何进行远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

1814_ChibiOS中的时间以及时间间隔处理

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 时间的相关配置&#xff0c;有tick的计数精度、时钟频率、间隔时间精度、时间类型大小等不同的配置。这些参数&#xff0c;涉及到系统的时间计数…

日志回滚工作原理剖析及在文件系统的作用

日志回滚原理 当涉及到崩溃恢复和一致性保护时&#xff0c;日志回滚是一种常见的机制。它通过记录写入操作到一个事务日志中&#xff0c;而不是直接应用到文件系统&#xff0c;以保护文件系统的一致性。下面是日志回滚的一般工作原理&#xff1a; 日志记录&#xff1a;在进行写…