c++代码各种注释示例详解

 更新时间:2021年12月07日 09:41:42   作者:鹿九丸  
大家好,本篇文章主要讲的是c++代码各种注释示例详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

1、前言

今天想带大家来了解一下注释,当然,是C语言中的注释,这个大家都并不会感到陌生,但是,当有一天面试官问你?小伙子啊,你能给我讲讲什么是注释吗?大家应该都会懵的吧,毕竟注释有什么可讲的呢?但是事实真的如此吗?今天就由我来带大家了解一下注释吧!

2、正文(危)

1.以代码例子为例

(1)代码段1

首先来几段注释的例子大家来判断下对错(从语法角度和是否实现注释的效果来看)

#include <stdio.h>
int main()
{
	int /* */ i; 
	char* s = "abcdefgh //hijklmn";
	//Is it a\
	valid comment? 
	in/* */t j; 
	return 0;
}

当大家把这段代码放在vs上去运行的时候,报错的代码只有最后一行代码,即in/* */t j;我们就知道这行代码是有语法错误的,那么其它的代码就完全没有问题了吗?当然,其它的代码没有了语法错误,但是它们的注释效果真正实现了吗?

补充知识:注释被替换是在预处理阶段实现的,注释被替换,本质是替换成空格,上述报错的那一句本质上应该是 in t i;编译器自然会报错,报错是在预处理阶段进行语法检查时出错的,出现了语法错误。

这个是编译器上的标识图,上面的几行代码虽然没有报语法错误,但是有的代码却没有真正实现其注释的效果,下面我们将一行一行的带大家来进行分析!

首先看第一行:int   /* */   i;经过替换后。中间的转换为空格,可见并没有语法错误,且能够达到注释的目的。

接下来看第二行代码,这个地方大家可能会感到疑惑了,我命名加了注释符的啊,但是为什么没有达到我想要的效果呢?这个地方的原因是因为//是在字符串中,此时的第一个/被理解成了转义字符,而第二个则真正被理解成了/,至于为什么第二个/没有被理解成转义字符呢?因为第一个/防止了后面的字母被转义,所以后免的一个/才没有被理解成是转义字符,好像扯的有点远了。这个地方需要告诉大家的是在字符串中是无法进行注释的,因为在字符串中的/有特殊的含义!

有的朋友就好奇了,既然C++风格的注释行不通,那么C语言的风格能否行得通呢?答案是不能,下面给大家证明一下吧!

很明显,依旧没有成功行注释,原因同上。

接下来来看第三行代码,我们可以得出一个结论,C++风格的注释是可以续行的!

(2)代码段2

/*这是*/#/*一条*/define/*合法的*/ID/*预处理*/replacement/*指*/list/*令*/
//这段代码指的就是用replacement list替换ID

当这段代码放到VS上是这样的:

上述两段代码都能编译通过,这说明# 和 define之间可以带空格。(因为注释最终要被空格所代替)

//是C++风格的注释,而/* */则是C语言风格的注释,前者可以一次写多个,不过从第一个//往后就都是注释的内容。

(3)代码段3

/*
/*
*/
*/

 这段代码在vs中是下面这样的:

 注意:/* */不能嵌套注释。/*总是和离它最近的*/进行匹配。

在这段代码中,最终第一行和第三行中的*/进行匹配,剩下最后一个*/没有与之进行配对的。

(4)代码段4

int x = 10 ;
int y = 10;
int z = 5;
int *p = &z;
y = x/*p;

上面这种代码一定要注意,乍一看没有什么问题,但是接下来我们放到编译器上看一下:

这种代码一定要注意,/*容易被编译器认为是注释,所以会报错。

解决方案有两种:

1.y = x / *p;即在/后面加一个空格,不要让/*连在一起。

2.y = x/(*p);(推荐用第二种)。

2.其它的注释方法

(1)条件编译

#include <stdio.h>
#include <windows.h>
#define MONEY 1(只有定义了前面的宏,ifdef到endif中间的这段代码才能够正常运行,未定义则跳过)
int main()
{
#ifdef MONEY
	printf("for test1\n"); //test1
	printf("for test2\n"); //test2
#endif
	system("pause");
	return 0;
}

(2)if条件

可以通过if(0)来进行注释,但并不推荐。

到此这篇关于c++代码各种注释示例详解的文章就介绍到这了,更多相关c++代码注释内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ Boost Bimap示例详细讲解

    C++ Boost Bimap示例详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C语言近万字为你讲透栈和队列

    C语言近万字为你讲透栈和队列

    对于线性表,我们可能要执行下列操作:访问表的第k个结点、在k这个结点之前或者之后插入一个新结点,抑或是删除第k个结点等等操作,其中我们会遇到值对第一个或者最后一个结点插入、删除、和访问值的线性表,我们给它们以特殊的名称:栈、队列、双端队列
    2022-05-05
  • C语言实现文件操作实例(简单图示讲解)

    C语言实现文件操作实例(简单图示讲解)

    与普通文件载体不同,文件是以硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等等,下面这篇文章主要给大家介绍了关于C语言实现文件操作实例的相关资料,需要的朋友可以参考下
    2023-02-02
  • OpenCV实现马赛克和毛玻璃滤镜特效

    OpenCV实现马赛克和毛玻璃滤镜特效

    这篇文章主要为大家详细介绍了OpenCV实现马赛克和毛玻璃滤镜特效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下方法
    2019-05-05
  • C语言实现俄罗斯方块源代码

    C语言实现俄罗斯方块源代码

    这篇文章主要为大家详细介绍了C语言实现俄罗斯方块的源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • c++加法高精度算法的简单实现

    c++加法高精度算法的简单实现

    下面小编就为大家带来一篇c++加法高精度算法的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • C语言初识变量常量字符串转义符及注释方式简介

    C语言初识变量常量字符串转义符及注释方式简介

    最强的C语言笔记,此处对于C语言的基础部分做一个简要的介绍,作者实属初学,写博客也是作者学习的一个过程,若文中内容有理解不到位或者有不当之处,还请朋友们不吝指正
    2021-11-11
  • C++ OpenCV绘制几何图形

    C++ OpenCV绘制几何图形

    这篇文章主要为大家详细介绍了C++ OpenCV绘制几何图形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • c++中比较好用的“黑科技”

    c++中比较好用的“黑科技”

    这篇文章主要介绍了c++中比较好用的“黑科技”,一些常用小编没有给大家罗列出,主要给大家介绍了sort函数,需要的朋友可以参考下
    2020-02-02
  • VS编译出现MSB3073命令的解决方案

    VS编译出现MSB3073命令的解决方案

    =error MSB3073是Visual Studio编译器报出的错误,本文主要介绍了VS编译出现MSB3073命令的解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09

最新评论