当前位置: 首页 > news >正文

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语言编程时&#xff0c;常用的注释方式有如下几种&#xff1a; (1)单行注释 // … (2)多行注释 /* … */ (3)条件编译注释 #if 0…#endif (1)(2)在入门教程中比较常见。 对于(1) 【单行注释 // …】&#xff0c;注释只能显示…...

20款VS Code实用插件推荐

前言&#xff1a; VS Code是一个轻量级但功能强大的源代码编辑器&#xff0c;轻量级指的是下载下来的VS Code其实就是一个简单的编辑器&#xff0c;强大指的是支持多种语言的环境插件拓展&#xff0c;也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…...

攻防世界web篇-robots

打开网址后&#xff0c;发现是一个空白页面的网页 但是&#xff0c;这个题目是robots&#xff0c;所以就联想到robots.txt这个目录&#xff0c;于是我就试了一下 注意&#xff1a;这里有个php的文件&#xff0c;这个应该就是一个目录文件 当输入后&#xff0c;直接回车&#…...

6 个可解锁部分 GPT-4 功能的 Chrome 扩展(无需支付 ChatGPT Plus 费用)

在过去的几个月里&#xff0c;我广泛探索了 ChatGPT 的所有可用插件。在此期间&#xff0c;我发现了一些令人惊叹的插件&#xff0c;它们改进了我使用 ChatGPT 的方式&#xff0c;但现在&#xff0c;我将透露一些您需要了解的内容。 借助 Chrome 扩展程序&#xff0c;所有 Chat…...

centos 7.9 安装sshpass

1.作用 sshpass是一个用于非交互式SSH密码验证的实用程序。它可以用于自动输入密码以进行SSH登录&#xff0c;从而简化了自动化脚本和批处理作业中的SSH连接过程。 sshpass命令可以与ssh命令一起使用&#xff0c;通过在命令行中提供密码参数来执行远程命令。以下是一个示例命…...

CompletableFuture多任务异步,获取返回值,汇总结果

线程池异步的基础知识 详情见&#xff1a;https://blog.csdn.net/sinat_32502451/article/details/133039624 线程池执行多任务&#xff0c;获取返回值 线程池的 submit()方法&#xff0c;可以提交任务&#xff0c;并返回 Future接口。 而 future.get()&#xff0c;可以获取…...

Linux上Qt和Opencv人脸识别项目学习路线(嵌入式/C++)

本文将介绍Linux人脸识别项目的开发流程, 只作简略介绍所需知识点及大致流程。 注&#xff1a;若需详细教程请联系作者&#xff08;见文末&#xff09;。 一、基本开发环境搭建 1.1 安装虚拟机Ubuntu 虚拟机采用的是VMware&#xff0c;需要下载VMware安装包、ubuntu系统镜像…...

spring 源码阅读之@Configuration解析

Configuration解析 Configuration注解用于标识一个类是配置类&#xff0c;用于声明和组织Bean定义&#xff0c;首先Configuration本身也是一个Component&#xff0c;在其注解定义上标有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 包、不四次握手),等待在同域名…...

设计模式记录

设计模式 抽象工厂模式单例模式要实现一个单例&#xff0c;需要关注的点有下面几个: 抽象工厂模式 PHP工厂模式是一种可扩展、可维护和可重复使用的方法&#xff0c;旨在提供通用接口&#xff0c;用于创建对象。工厂模式的主要组成部分包括抽象工厂、具体工厂、抽象产品和具体产…...

Java设计模式之亨元模式(Flyweight Pattern)

亨元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在通过共享对象来最大限度地减少内存使用和提高性能。该模式适用于需要创建大量相似对象的情况&#xff0c;其中许多对象具有相同的状态。通过共享相同的状态&#xff0c;亨元模式可以减少…...

正点原子嵌入式linux驱动开发——Linux中断

不管是单片机裸机实验还是Linux下的驱动实验&#xff0c;中断都是频繁使用的功能&#xff0c;在裸机中使用中断需要做一大堆的工作&#xff0c;比如配置寄存器&#xff0c;使能IRQ等等。但是Linux内核提供了完善的中断框架&#xff0c;只需要申请中断&#xff0c;然后注册中断处…...

基于Jaya优化算法的电力系统最优潮流研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Write-Ahead Log(PostgreSQL 14 Internals翻译版)

日志 如果发生停电、操作系统错误或数据库服务器崩溃等故障&#xff0c;RAM中的所有内容都将丢失&#xff1b;只有写入磁盘的数据才会被保留。要在故障后启动服务器&#xff0c;必须恢复数据一致性。如果磁盘本身已损坏&#xff0c;则必须通过备份恢复来解决相同的问题。 理论…...

CUDA 学习记录

1.关于volatile&#xff1a; 对于文章中这个函数&#xff0c; __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 按钮和图标

按钮和图标在网页设计中扮演着重要的角色&#xff0c;它们是用户与网站或应用程序交互的关键元素之一。Bootstrap 是一个流行的前端框架&#xff0c;提供了丰富的按钮样式和图标库&#xff0c;使开发者能够轻松创建吸引人的界面。在本文中&#xff0c;我们将深入探讨 Bootstrap…...

基于Java的人事管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝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站打响声量?

元梦之星是腾讯天美工作室群研发的超开星乐园派对手游&#xff0c;于2023年1月17日通过审批。该游戏风格可爱软萌&#xff0c;带有社交属性&#xff0c;又是一款开黑聚会的手游&#xff0c;备受年轻人关注。 飞瓜数据&#xff08;B站版&#xff09;显示&#xff0c;元梦之星在…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...