近期都在忙着项目开发,因此博客更新就比较佛系了,当然期间也看了不少博主的文章,学到了很多技巧,本文大致罗列下。顺便理一下自己的思路,有输入也要有输出嘛。
网上很多文章都说,enum枚举比宏要好,优点的确也是有的,序号自动递增,更加模块化, 更加好管理。
其实宏也是有比较好的功能的,只是通常,我们都不会使用高级的用法,反正网络上也是普通的用法,很少有高级用法(有当然有的,需要自己好好耐心找)。
1、通常来讲,宏就是在预编译的用于替换的,因此,如果宏里面有enum,那么预编译是不会成功的。gcc,tcc等编译器可以使用-E选项。可以输出.i 文件,查看预编译的输出文件。可以验证自己宏定义、宏展开是否正确。keil 或者iar等嵌入式开发工具(我主要是使用者两个工具,其他免费的比如segger es,stmcubeide等肯定也可以配置输出的),就是勾勾选选的事情,就可以输出预编译文件了。这就是ide流程好入门的原因啊,把很多工作都做了。另外,vscode是个好工具,集成了C/C++的插件鼠标点击到代码上就可以宏展开,微软的工具还是说不错的,毕竟“宇宙第一ide”是来自微软的vs。
2、x macro这个技巧已经存在很多年了。上时间,c语言还未诞生就存在于其他编程语言中了。但是c语言也是有的,应该说是将这个特性引用了。不过中文搜索比较难搜索到,比较好的是我收藏的:https://blog.csdn.net/lianyunyouyou/article/details/108562912博客文章。另外就是英文网址搜索了,bing,google等等我的博客中之前也是收集过的。x macro好像还没有中文名称,又有点也有缺点,其中缺点就是不宜看懂,功力差点的,估计看不懂,需要多看几遍就看懂了。也难过国内开发或者网站搜索都相对比较很少见了。这个技巧也是可学可不学,普通的开发,不用该功能也能对付的。了解了可以多条开发的路。 https://blog.csdn.net/liming0931/article/details/109702175,https://blog.csdn.net/liming0931/article/details/110393297
3、c99中添加了很多新的特性,gnu c的语法就添加了更多扩展了,很多语法都是c标准中没有的。其中宏定义添加了可变参数的功能,__VA_ARGS__,网上直接搜索“”可变参数宏“”,中文英文都很多的,所以这个功能国内开发人员是用的很多的。这里就不展开了。
4、网上有个库比较牛逼,叫plooc,github有镜像的,里面的宏定义简直用的是炉火纯青的地步,还有一个叫掩码结构体的使用,基本上实现了面向对象的功能,提高了模块化编程的层次。这个作者也是arm公司的开发人员,超级牛逼的,也是他的文章,把宏“”正名“”了。期初我也以为宏定义没啥大的功能。网站搜索“傻孩子”,微信公众号“裸机思维”。
5、gnu的the c preprocessor的在线文档,讲述了很多宏的使用方法,以及如何是避免采坑的tips。大家可以去看看。是比较权威的文档了。https://gcc.gnu.org/onlinedocs/gcc-10.2.0/cpp/,https://gcc.gnu.org/onlinedocs/
6、宏定义可以定义函数宏,通常情况下,也就是宏的一行不要太多代码即可,目前c99字符数量不要超过4096就可以,可以提高编程效率,维护代码更加方便快捷。都知道c++是有模板的,那么c语言的宏可以模仿c++的模板,至少是简易版本的模板,提高了开发的效率。