跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
Diodes捷比信 · 专业器件主题站

这些C语言中的预定义宏不能

注意,星号嵌入式旅馆,干货及时交付[指南]嵌入式er编程,应该掌握一些常见的宏如何使用,它将为您带来许多有用的功能。有关标准定义宏的详细示例,请参阅今天发布的第二篇重印文章,摘要非常清楚。本文提供了一个特殊的示例,说明如何使用日期和时间宏将编译时间信息自动构建到固件中。标准预定义宏用法的示例:fprintf(stderr,"内部& nbsp;错误:& nbsp;"& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; “负数”和“  & nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;"%d& nbsp at at& nbsp;%s,& n nbsp; line& nbsp;%d。”,& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; & nbsp; __ FILE __,& nbsp; __ LINE__);其他详细的示例可以阅读今天的第二篇重印文章,该摘要非常清楚和详细,在此不再赘述。系统预定义宏不同的编译器或不同的硬件体系结构将定义一些与系统相关的预定义宏。以IAR for ARM为例:如何检查宏是否预定义?我们可以查看编译器手册。此外,您还可以使用以下方式提示进行预处理:#error,用于生成编译错误消息,并停止编译#warning用于生成编译警告,但不停止编译。两者的语法相同,如下所示:#error“ message” #warning“ message”例如:/ * or& nbsp; error& nbsp;打印提示,但编译将停止* /#ifdef& nbsp; __ AAPCS __#error& nbsp;“ __ AAPCS __& nbsp”已被“定义” #endif / *或& nbsp; warning 打印提示,但编译将继续* /#ifdef& nbsp; __ AAPCS __#warning “ __ AAPCS __& nbsp”已被定义为#endif另一个示例是GNU C,它还定义了许多扩展的内置宏,例如:如何重新定义宏#undef可以取消已定义的宏,例如:#ifdef& nbsp; TRUE#undef& nbsp; TRUE #endif#define& nbsp; TRUE& nbsp; 1这是什么意思?之前已经定义了它,但是在这里我们取消它并重新定义它。骚动?这是有意义的,并具有实用价值。因为宏是根据包含关系逐层扩展的,所以本质是编译前的文本替换。这样,您可以清楚地指定宏在某些部分中是某个值,因为多个人可以协调开发或使用其他开发工具包或开发环境,并且已经定义了一些宏。如果不这样做,则宏值会很高。它可能不是您想要的值。再说一遍:宏的本质是在编译器之前进行文本替换,这也是预编译中最重要的任务之一。时间宏项目示例项目开发和发布的固件通常需要将版本信息和编译时间信息内置到固件中。 ,可能涉及的应用程序需求:通过引导加载程序升级固件时,执行界面显示,主机软件通信,阅读此信息以及检测新旧版本。此时,您可以直接使用__DATE__和__TIME__将编译时间自动编译到发布的固件中。示例代码如下:/ *以ARM& amp; amp; amp; amp; amp; amp; quot;为例* /#include& lt; stdio.h&#define& nbsp; FW_VERSION& nbsp ;& nbsp;“ 1.0.0” const& nbsp; char& nbsp; * firmwareInf [] = {  & nbsp; {__ DATE __},& nbsp; < FW_VERSION}}; int& nbsp; main(void){& nbsp;& nbsp; & nbsp;& nbsp; printf(“编译时间:%s& nbsp;%s& nbsp;

固件版本:%s

",firmwareInf [0],firmwareInf [1],firmwareInf [2]);& nbsp;& nbsp;& nbsp;而(1)& nbsp;& nbsp; & nbsp;& nbsp; {& nbsp;& nbsp;& nbsp;& nbsp;}}让我们来看看效果:扩展思路,您还可以将firmwareInf常量字符串放入某个存储位置,这需要使用链接程序脚本来指定存储位置。宏的使用在C语言中非常有价值。如果阅读u -boot和Linux内核代码,将会发现大量复杂的应用程序,因此有必要首先掌握这些基本的宏应用程序。