C语言中的3种注释方法

news2024/11/19 0:31:11

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.coloradmin.cn/o/1112693.html

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

相关文章

将输入对象转换为数组数组的维度大于等于1numpy.atleast_1d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将输入对象转换为数组 数组的维度大于等于1 numpy.atleast_1d() 选择题 使用numpy.atleast_1d()函数,下列正确的是&#xff1f; import numpy as np a1 1 a2 ((1,2,3),(4,5,6)) print("…

Dev-C++ 软件安装教程(附安装包下载)

Dev-C&#xff08;123网盘&#xff09;提取码:EoF8https://www.123pan.com/s/JRpSVv-dKnjv.html &#xff08;软件包下载后&#xff0c;右键解压&#xff09; 一、打开文件夹&#xff0c;双击“Dev-C” 二、软件安装&#xff0c;点击“OK” 三、点击“I Agree” 四、点击“Ne…

计算机视觉基础(5)——特征点及其描述子

前言 本文我们将学习到特征点及其描述子。在特征点检测中&#xff0c;我们将学习角点检测和SIFT关键点检测器&#xff0c;角点检测以哈里斯角点检测器为例进行说明&#xff0c;SIFT将从高斯拉普拉斯算子和高斯差分算子展开。在描述子部分&#xff0c;我们将分别学习SIFT描述子和…

49数码论坛系统设计与实现

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

浅析限流式保护器在低压配电系统中电气火灾的应用

安科瑞 华楠 【摘要】文章分析了低压配电系统短路的类型、原因及火灾危险性&#xff0c;并提出改善措施。 【关键词】&#xff1a;低压配电系统&#xff1b; 短路&#xff1b; 措施 0引言 随着人类进入现代文明社会&#xff0c;电气的普及深入千家万户&#xff0c;广泛应用于…

npm ERR! exited with error code: 128

1.遇到的问题 报错信息&#xff1a;npm ERR! E:\tools\Gitt\Git\cmd\git.EXE ls-remote -h -t https://github.com/nhn/raphael.git npm ERR! npm ERR! fatal: unable to access https://github.com/nhn/raphael.git/: OpenSSL SSL_read: Connection was reset, errno 10054 …

FPGA project : IIC_wr_eeprom

简介&#xff1a; 简单双向二线制&#xff0c;同步串行总线。 scl&#xff1a;串行时钟线&#xff0c;用于同步通讯数据。 sda&#xff1a;双向串行数据线。 物理层&#xff1a; 1&#xff0c;支持挂载多设备。 2&#xff0c;二线制。 3&#xff0c;每个设备有其单独的地…

【已解决】java的gradle项目报错org.gradle .api.plugins .MavenPlugin

我的java的gradle项目经常报错org.gradle .api.plugins .MavenPlugin。报错这个问题是因为依赖起冲突了&#xff0c;我在网上试了很多方法都没有效果&#xff0c;折让小编我很是苦恼&#xff0c;不过还好到最后问题还是解决了。 首先要知道你的项目所使用的gradle版本&#xf…

Webpack十大缺点:当过度工程化遇上简单的静态页面

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

React-Router路由

1.React Router的基本使用 安装&#xff1a;安装时&#xff0c;选择react-router-dom&#xff0c;react-router会包含一些react-native的内容&#xff0c;web开发并不需要&#xff1b; npm install react-router-dom 路径模式 BrowserRouter使用history模式&#xff1b; Hash…

【六:(mock数据)spring boot+mybatis+yml】

目录 1.1、代码编写Demo类User类启动类 APplication 1.2、配置类查询语句的配置 mysql.ymlspringboot的配置 application.yml日志的配置 logback.xml数据库的配置 mybatis-config.xml 1.3、测试&#xff1a;1.3.1、测试获取用户数1.3.2、添加用户1.3.3、数据的更新1.3.4、数据的…

【八:(调springboot+testng+mybatis+数据校验】

目录 1、代码结构configcontrollermodelspringboot启动类 2、配置资源mysql.xmlapplication.ymllogback.xmlmybatis-config.xml数据库配置 3、测试验证 1、代码结构 config package com.course.config; import org.springframework.context.annotation.Bean; import org.sprin…

Linux 进程操作

文章目录 进程的基本知识进程pid进程常用的函数 forkwait和waitpidexec函数簇system函数信号处理signal函数Linux的SIGUSR1SIGUSR2 讨论 进程的基本知识 一个程序的执行称为一个进程&#xff0c;所有的代码都是在进程中执行的&#xff0c;进程是操作系统资源分配的基本单位。 在…

在启智平台上安装anconda(启智平台中新建调试任务,选的基础镜像中有conda的,就无需安装)

安装Anaconda3-5.0.1-Linux-x86_64.sh python版本是3.6 在下面的网站上找到要下载的anaconda版本&#xff0c;把对应的.sh文件下载下来 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 把sh文件压缩成.zip文件&#xff0c;拖到启智平台的调试页面 上传到平台上 un…

tlaplus-vscode插件使用记录

参考官方教程Getting Started 和油管视频A gentle intro to TLA 入门和命令 首先在vscode的扩展里面下载 然后新建一个squares.tla文件 在代码区域先输入module生成上下的分隔符&#xff0c;然后输入pluscal来调用模版&#xff0c;生成一堆预设代码 小改一下&#xff0c;编写一…

WGBS项目文章 | 在缺氮情况下,细胞自噬对植物DNA甲基化会产生怎样的影响?

发表单位&#xff1a;中国科学院江西省庐山植物园 发表日期&#xff1a;2023年9月13日 研究期刊&#xff1a;International Journal of Molecular Sciences&#xff08;IF: 5.6&#xff09; 研究材料&#xff1a;拟南芥 2023年9月13日&#xff0c;中国科学院江西省庐山植物…

【二:Spring-AOP】

目录 一 、AOP1、什么是AOP2、AOP的类型3、AOP&#xff08;底层原理&#xff09;&#xff08;1&#xff09;第一种有接口情况&#xff0c;使用JDK 动态代理&#xff08;2&#xff09;第二种没有接口情况&#xff0c;使用[CGLIB](https://so.csdn.net/so/search?qCGLIB&spm…

【MyBatis进阶】mybatis-config.xml分析以及try-catch新用法

目录 尝试在mybatis项目中书写增删改查 遇见问题&#xff1a;使用mybaties向数据库中插入数据&#xff0c;idea显示插入成功&#xff0c;但是数据库中并没有数据变化? MyBatis核心配置文件剖析 细节剖析&#xff1a; try-catch新用法 截至目前我的项目存在的问题&#xf…

Milk-V Duo快速上手

前言 &#xff08;1&#xff09;此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。 &#xff08;2&#xff09;该课程相关代码gitee链接&#xff1b; &#xff08;3&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 &#xff08;4&#xff09;最近实习需要…

Linux下shell编写脚本指南

文章目录 &#x1f31f; Linux下Shell编写脚本&#x1f34a; 为什么要使用Shell编写脚本&#x1f34a; Shell脚本的基础知识&#x1f389; 基本语法&#x1f389; 常用命令&#x1f389; 脚本文件的执行 &#x1f34a; Shell脚本的编写技巧&#x1f389; 脚本文件的注释&#x…