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)合理的注释通常出现在一条语句的上方或者右边,不应出现在一条语句或者一个程序段的后面。

相关推荐
笃励11 分钟前
Java面试题二
java·开发语言·python
jyan_敬言20 分钟前
【Linux】Linux命令与操作详解(一)文件管理(文件命令)、用户与用户组管理(创建、删除用户/组)
linux·运维·服务器·c语言·开发语言·汇编·c++
FL162386312923 分钟前
[C#]C# winform部署yolov11-pose姿态估计onnx模型
开发语言·yolo·c#
笑非不退34 分钟前
C++ 异步编程 并发编程技术
开发语言·c++
bcdaren1 小时前
《Windows PE》4.2 绑定导入表
c语言·汇编·windows·pe
爱写代码的刚子1 小时前
C++知识总结
java·开发语言·c++
martian6651 小时前
QT开发:基于Qt实现的交通信号灯模拟器:实现一个带有倒计时功能的图形界面应用
开发语言·qt
冷琴19961 小时前
基于java+springboot的酒店预定网站、酒店客房管理系统
java·开发语言·spring boot
缘友一世1 小时前
macOS .bash_profile配置文件优化记录
开发语言·macos·bash
tekin1 小时前
macos 中使用macport安装,配置,切换多版本php,使用port 安装php扩展方法总结
开发语言·macos·php·port·mac多版本php安装管理·port-select