赞
踩
这一个系列,还是获得了大家的认可,不断地转载,这个系列的目的就是用比较简单的方式,深入理解原理,进行学习,而不是通过记忆的方式。好了我们继续来讲。今天说下比较有趣的内容,#,##两个预处理命令。
我们先说#,这个比较简单,这个代表将后面的内容,用字串将其包裹起来。
比如:
输出结果,
我们从代码可以看到:
#opt就是将#后面的内容,用字串替代,比如:
opt=5+6;
#opt="5+6"
这个就是它的功效,很多时候我们需要表达式,用来做注释和运算配合,比如上面的printf_add ,我们可以用#这个前缀,来实现将我们的操作变成字串,打印出来,方便我们查看。
这就是# 的意义。这个很好理解,而##就更加有意义了,它是完成前后的黏连作用。
举例来看,
#define GPIO(x) gpio##x
这个的用途是,GPIO(1),通过替换就变成了gpio1,这个就是会用在代码中,而gpio1是全局定义的,这个是方便我们进行后续的调整,将gpio1的地方,进行修正,指向新的硬件的拐点。
我们现在先来汇总下整个的用法:
1 默认什么都不加,就是直接替换
2 加上#,就是字串替换
3 加上##,就是拼接
那么它的实际场景是什么,是定义一些通用模板,我们来看看:
定义一个结构体,然后赋值,同时定义如何应用,方便处理,##就是为了快速定义,能够对应不同的类型,前缀就是基类的逻辑,##连接的一端,一般不变,最为前缀或者后缀修饰,而变化的部分就是依据具体的项目,模块,进行变化,同时可以自动继承基类,完成C++的类的功能。
而我们根本不需要记忆,可以使用之前讲过的,gcc -E hello.c -o hello.i 用这个命令,把预处理后的内容输出,查看即可。这才是根本,也就是我们对于自己写的,想看看最终生成了什么,用这个命令就可以。
解决问题,寻找通用解决思路,这样子才能够遇到未知问题,能够有思路去拆解。
好了,这一讲就说到这里,下一节我们说下,C语言中各个变量的初始化时机。
喜欢,帮忙转发~~
~~ end not end ~~
热门文章
职场老鸟,互联网十年从业生涯,分享 [Java,Python,安卓,AI,爬虫] 技术文章,学习资料, 热点趣闻等。关注回复 1024 Python 电子书大全 面试资料,给你一份私藏的程序员好礼,永远更新中!赶紧来关注哦!
我的微信 code_gg_boy 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。