1
#error 与#warning
谈到预编译大家常用的有#if、#else、#ifdef、#ifndef、#endif等等条件编译选项。
然而在我们阅读一些大型的代码或者库的时候,一般都会看到有#error和#warning,可能有些小伙伴一扫而过并没有了解清楚这些预编译指令到底该怎么用,写了很久的代码估计也重来没有敲过他们。
#error / #warning
形式 :#error / #warningmessage
作用 :生成一个编译错误事件并停止编译/发出警告信息
注意 :message可以不需要双引号。
参考demo:
#include
输出结果:
编译失败,无法生成可执行文件
上面是放开宏,且使用warning的情况,无其他错误的情况下可以生成可执行文件。
解释一下:
通过上面的测试代码可以了解到,通过配合条件预编译#if等,#error和#warning能够在编译过程中分别以错误和告警的形式提醒开发人员注意相关代码设计问题,从而保证代码正确性。
这样对于发布一些庞大的库代码时,为了让开发人员正确的使用库,这些提示会帮助他更好的移植代码。
那么经常有很多小伙伴编译出来的代码有一大堆warning,总是觉得warning关系不大,然而warning也是分不同类型的,对于一些未使用的变量倒关系不大,其他情况还是要认真对待,最好是做到"0 Error,0 warning".
2
#undef
#undef标识符用于把前面的宏定义名取消,别看这宏用得不多,作用可大着呢,下面我简单举几个例子:
1
局部宏定义
一旦定义了宏,那么该文件中往下所有的代码都可以使用该宏,即使是函数内部,这样导致宏比较混乱,如下面代码:
参考demo:
#include
输出结果:
解释一下:
假如我们没有注意到函数内部的同名宏定义,当然告警也没管,那么在main函数中使用同名宏定义就可能不是我们期待的最上面的宏定义,造成程序bug。
所以我们可以使用#undef来限制每个宏的作用域,如果每个函数内部都使用了#undef,那么main函数中再使用会报宏没有定义,这样便可以找到问题,当然也可以通过警告了解到。
2
选择接口
通过宏来切换不同的接口供程序使用:
参考demo:
#include
#include
输出结果:
3
自定义接口
当多个人维护一套代码的时候,有些同事喜欢调用库函数接口,而有些同事喜欢调用自定义接口,为了方便统一使用自定义接口或者库接口,我们会进行如下操作:
参考demo:
#include
#ifndef__DRIVE_H__ #define__DRIVE_H__ #defineprintfprintf("pleaseuseKprintf! "); externvoidKprintf(char*str); #endif
输出结果:
这样下面的代码你就只能够使用Kprintf来进行输出打印,而当我们放开注释掉的宏,这样就又可以使用printf了,还是比较方便的。
责任编辑:lq
-
代码
+关注
关注
30文章
4983浏览量
74543 -
编译
+关注
关注
0文章
697浏览量
35343
原文标题:"最常见"却又"最不常用"的三个预编译
文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
做单片机开发,新手最容易犯的 3 个选型误区
EtherCAT 主站开发,国内工程师最常问的三个核心问题
Linux新手最常踩的10个命令坑介绍
SPE协议芯片如何让工业布线瘦身70%?三个实战案例告诉你
导热系数越高越好?关于导热硅胶片的三个认知误区
骏马奔腾,芯向未来:SiC功率器件的“三个必然”与丙午马年的产业跃迁
altium designer 如何画短路两个或者三个网络的封装?
MDD从工程故障看三极管三个极的设计误区与失效案例
三防漆应用失败?八个常见问题与解决方案一文搞定 | 东莞 铬锐特实业
#define预编译的指令
#include预编译的指令
未来工业AI发展的三个必然阶段
怎么结合嵌入式,Linux,和FPGA三个方向达到一个均衡发展?
"最常见"却又"最不常用"的三个预编译
评论