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)合理的注释通常出现在一条语句的上方或者右边,不应出现在一条语句或者一个程序段的后面。
相关文章:
C语言中的3种注释方法
C语言中的3种注释方法 2021年8月28日星期六席锦 在用C语言编程时,常用的注释方式有如下几种: (1)单行注释 // … (2)多行注释 /* … */ (3)条件编译注释 #if 0…#endif (1)(2)在入门教程中比较常见。 对于(1) 【单行注释 // …】,注释只能显示…...
20款VS Code实用插件推荐
前言: VS Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的VS Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…...
攻防世界web篇-robots
打开网址后,发现是一个空白页面的网页 但是,这个题目是robots,所以就联想到robots.txt这个目录,于是我就试了一下 注意:这里有个php的文件,这个应该就是一个目录文件 当输入后,直接回车&#…...
6 个可解锁部分 GPT-4 功能的 Chrome 扩展(无需支付 ChatGPT Plus 费用)
在过去的几个月里,我广泛探索了 ChatGPT 的所有可用插件。在此期间,我发现了一些令人惊叹的插件,它们改进了我使用 ChatGPT 的方式,但现在,我将透露一些您需要了解的内容。 借助 Chrome 扩展程序,所有 Chat…...
centos 7.9 安装sshpass
1.作用 sshpass是一个用于非交互式SSH密码验证的实用程序。它可以用于自动输入密码以进行SSH登录,从而简化了自动化脚本和批处理作业中的SSH连接过程。 sshpass命令可以与ssh命令一起使用,通过在命令行中提供密码参数来执行远程命令。以下是一个示例命…...
CompletableFuture多任务异步,获取返回值,汇总结果
线程池异步的基础知识 详情见:https://blog.csdn.net/sinat_32502451/article/details/133039624 线程池执行多任务,获取返回值 线程池的 submit()方法,可以提交任务,并返回 Future接口。 而 future.get(),可以获取…...
Linux上Qt和Opencv人脸识别项目学习路线(嵌入式/C++)
本文将介绍Linux人脸识别项目的开发流程, 只作简略介绍所需知识点及大致流程。 注:若需详细教程请联系作者(见文末)。 一、基本开发环境搭建 1.1 安装虚拟机Ubuntu 虚拟机采用的是VMware,需要下载VMware安装包、ubuntu系统镜像…...
spring 源码阅读之@Configuration解析
Configuration解析 Configuration注解用于标识一个类是配置类,用于声明和组织Bean定义,首先Configuration本身也是一个Component,在其注解定义上标有Component Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Co…...
Java Web 33道面试题汇总
更多面试合集在:https://javaxiaobear.cn 1、http 的长连接和短连接? HTTP 协议有 HTTP/1.0 版本和 HTTP/1.1 版本。HTTP1.1 默认保持长连接(HTTP persistent connection,也翻译为持久连接),数据传输完成了保持 TCP 连接不断开(不发 RST 包、不四次握手),等待在同域名…...
设计模式记录
设计模式 抽象工厂模式单例模式要实现一个单例,需要关注的点有下面几个: 抽象工厂模式 PHP工厂模式是一种可扩展、可维护和可重复使用的方法,旨在提供通用接口,用于创建对象。工厂模式的主要组成部分包括抽象工厂、具体工厂、抽象产品和具体产…...
Java设计模式之亨元模式(Flyweight Pattern)
亨元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来最大限度地减少内存使用和提高性能。该模式适用于需要创建大量相似对象的情况,其中许多对象具有相同的状态。通过共享相同的状态,亨元模式可以减少…...
正点原子嵌入式linux驱动开发——Linux中断
不管是单片机裸机实验还是Linux下的驱动实验,中断都是频繁使用的功能,在裸机中使用中断需要做一大堆的工作,比如配置寄存器,使能IRQ等等。但是Linux内核提供了完善的中断框架,只需要申请中断,然后注册中断处…...
基于Jaya优化算法的电力系统最优潮流研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Write-Ahead Log(PostgreSQL 14 Internals翻译版)
日志 如果发生停电、操作系统错误或数据库服务器崩溃等故障,RAM中的所有内容都将丢失;只有写入磁盘的数据才会被保留。要在故障后启动服务器,必须恢复数据一致性。如果磁盘本身已损坏,则必须通过备份恢复来解决相同的问题。 理论…...
CUDA 学习记录
1.关于volatile: 对于文章中这个函数, __global__ void reduceUnrollWarps8 (int *g_idata, int *g_odata, unsigned int n) {// set thread IDunsigned int tid threadIdx.x;unsigned int idx blockIdx.x * blockDim.x * 8 threadIdx.x;// convert…...
【Java 进阶篇】深入了解 Bootstrap 按钮和图标
按钮和图标在网页设计中扮演着重要的角色,它们是用户与网站或应用程序交互的关键元素之一。Bootstrap 是一个流行的前端框架,提供了丰富的按钮样式和图标库,使开发者能够轻松创建吸引人的界面。在本文中,我们将深入探讨 Bootstrap…...
基于Java的人事管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...
代码随想录算法训练营第五十九天| 647. 回文子串 516.最长回文子序列
今日学习的文章链接和视频链接 回文子串 https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.html 516.最长回文子序列 https://programmercarl.com/0516.%E6%9C%80%E9%95%BF%E5%9B%9E%E6%96%87%E5%AD%90%E5%BA%8F%E5%88%97.html 动态规划总结篇 https:…...
uniapp 小程序优惠劵样式
先看效果图 上代码 <view class"coupon"><view class"tickets" v-for"(item,index) in 10" :key"item"><view class"l-tickets"><view class"name">10元优惠劵</view><view cl…...
元梦之星内测上线,如何在B站打响声量?
元梦之星是腾讯天美工作室群研发的超开星乐园派对手游,于2023年1月17日通过审批。该游戏风格可爱软萌,带有社交属性,又是一款开黑聚会的手游,备受年轻人关注。 飞瓜数据(B站版)显示,元梦之星在…...
jScrollPane移动端适配:触控滚动条的完整解决方案
jScrollPane移动端适配:触控滚动条的完整解决方案 【免费下载链接】jScrollPane Pretty, customisable, cross browser replacement scrollbars 项目地址: https://gitcode.com/gh_mirrors/js/jScrollPane jScrollPane是一款功能强大的自定义滚动条插件&…...
数据结构入门:栈实现全解析
个人专栏:《数据结构-初阶》《经典OJ题目》《C语言》 欢迎各位大佬交流! 目录 一、栈的概念及结构 1、栈的基本概念 2、栈的结构 二、代码实现 0、初始化 1、入栈 2、出栈 3、返回栈顶元素 4、获取栈中有效元素个数 5、检测栈是否为空 6、销毁…...
Kala ISO 8601调度语法详解:从基础时间格式到复杂间隔配置
Kala ISO 8601调度语法详解:从基础时间格式到复杂间隔配置 【免费下载链接】kala Modern Job Scheduler 项目地址: https://gitcode.com/gh_mirrors/ka/kala Kala作为一款现代作业调度器(Modern Job Scheduler),采用ISO 86…...
og-aws容器监控终极指南:ECS服务发现与健康检查全解析
og-aws容器监控终极指南:ECS服务发现与健康检查全解析 【免费下载链接】og-aws 📙 Amazon Web Services — a practical guide 项目地址: https://gitcode.com/gh_mirrors/og/og-aws og-aws(GitHub 加速计划)是一份实用的 …...
家庭宽带问题(300兆带宽):手机能正常上网,但是笔记本电脑网速无法跑满。
一、首先是我的路由器设置如下: 二、一开始我手机连的是2.4G网络,使用“”全球网测“app测速如下: 测速网站:相对靠谱公正的22个测速网站(或APP或软件)大全(不断更新中)建议先收藏 后来我手机连上5Gwifi后…...
笔记软件换了一个又一个,Tolaria让知识库真正属于你
知识管理这件事,说起来容易,做起来却总让人觉得哪里不对劲。笔记软件换了一茬又一茬,从Evernote到Notion,从Obsidian到Logseq,每换一次就要折腾一次迁移,每换一次就要重新适应一套逻辑,到头来真…...
企业数仓揭秘:数据决策背后的核心引擎
公司里人人都在提的“数仓”,到底是什么? 目录 公司里人人都在提的“数仓”,到底是什么? 一、一句话讲透:数仓到底是什么? 二、关键区分:数仓 vs 业务数据库,90%的人都搞混了 三、为什么现在几乎所有公司,都必须建自己的数仓? 四、企业数仓的核心架构:分层设计,到…...
SMOTE算法解析:解决机器学习中的不平衡分类问题
1. 不平衡分类问题概述在机器学习分类任务中,我们经常会遇到类别分布严重不均衡的数据集。比如在信用卡欺诈检测中,正常交易可能占99.9%,而欺诈交易仅占0.1%。这种极端不平衡的数据分布会给模型训练带来显著挑战。传统机器学习算法通常假设数…...
容器启动慢、插件不加载、调试断点失效?Dev Containers 7类致命故障排查指南,错过再等半年
更多请点击: https://intelliparadigm.com 第一章:Dev Containers 故障排查核心原则与认知框架 Dev Containers 并非黑盒运行环境,其行为严格遵循容器生命周期、VS Code 扩展协议与 devcontainer.json 配置三者的协同约束。故障往往源于配置…...
大语言模型角色扮演技术:从人格注入到一致性对话的实现
1. 项目概述:当大语言模型学会“扮演”角色最近在GitHub上看到一个挺有意思的项目,叫awesome-llm-role-playing-with-persona。光看名字,你大概就能猜到它想做什么:让大语言模型(LLM)不再只是一个“万事通”…...
