几种C标准用法,例如__FILE__和__LINE__

作者:StrongHuang微信公众号:StrongHuang C语言有很多特殊用途,如果正确使用这些特殊用途,您的代码将变得更健壮,更易于维护。

例如,当我们使用STM32库的断言时,您会发现官方代码包含“ __FILE __,__ LINE__”。

标准外围设备库位于stm32fxxx_conf.h文件中:#define assert_param(expr)((expr)?(Void)0:assert_failed((uint8_t *)__ FILE__,__LINE__))HAL enable断言:您将看到以下代码在代码中:如果添加了此断言代码,则此语句对于开发大型和复杂的系统很有用。

每当程序运行错误时,它将打印程序代码指定的位置,以便我们可以在大型程序中快速找到错误的位置。

我们的系统将随着时间的推移不断升级和更新,这意味着需要提交许多版本的可执行文件(十六进制,bin等)。

但是,在以后使用该产品时,我们升级了一些设备,并且可能忽略了一些设备(忘记升级)。

如果出现故障,我们如何快速查找哪个版本的软件出现故障?我们的系统将随着时间的推移不断升级和更新,这意味着需要提交许多版本的可执行文件(十六进制,bin等)。

但是,在以后使用该产品时,我们升级了一些设备,并且可能忽略了一些设备(忘记升级)。

如果出现故障,我们如何快速查找哪个版本的软件出现故障? C几个特殊的标准定义__FILE__:正在编译的文件的文件名__LINE__:正在编译的文件的行号__DATE__:在编译时的日期字符串,例如“ Sep 22 2020”。

__TIME__:编译时的时间字符串,例如“ 10:00:00”。

__STDC__:确定文件是否为标准C程序1 .__ FILE__编译文件的名称File是中文文件,此处的含义主要是指与正在编译的文件相对应的正在编译的文件的路径和名称。

与Keil版本相对应的路径是相对于项目文件的,而IAR版本路径是相对于Windows路径的。

源代码:char BuildFile [] = __FILE __; printf(“”编译文件路径:%s ”,BuildFile); Keil:编译文件路径:Appmain.cIAR:编译文件路径:C:UsersstrongerHuangDesktop项目主目录Appmain.c2 .__ LINE__编译文件行号上面提到的是编译文件名,它是一个字符串,这是行号,这是一个整数变量。

这是两者之间的区别。

例如,将源代码添加到项目中:char BuildLine = __LINE __; printf(“”编译后的代码所在的行:%d ”,BuildLine);不能是字符串数组,不能打印信息:编译代码行:44在正常情况下,__ FILE__与__LINE__结合使用可以打印我们的代码信息并快速找到代码位置。

3. __DATE__编译日期__DATE__日期,应注意:该日期是Windows系统在编译时的日期,如果代码的相应部分之前已编译,并且没有后续编译,则此日期仍为前一个日期。

日期,并且不是以后编译的日期。

因此,如果此处使用的是固定版本,则在该版本固定后,您需要重新编译项目,并且该项目将更新为上次编译的日期。

代码:char BuildDate [] = __DATE __; printf(“编译日期:%s ”,BuildDate);输出结果:编译日期:2017年9月22日4. __TIME__编译时间这与__DATE__相同,编译时间也是一个字符串。

再次提醒:对于固定版本:需要重新编译,这是最后一次编译时间。

代码:char BuildTime [] = __TIME __; printf(“”编译时间:%s ,“ BuildTime”);输出结果编译时间:10:00:00 5. __STDC__标准C代码是在我们的微控制器和嵌入式编程中很少使用的标准。

当要求程序严格遵循ANSIC标准时,将为该标识符分配1。

主要是判断我们的程序文件是否为标准C程序。

代码:#ifdef __STDC__ printf(“标准C代码文件 ");#else printf("非标准C代码文件 ");#endif推荐阅读:FreeRTOS V10.4.0中已更新了哪些功能? Su,sudo,sudo su和sudo -i的使用和区别百度SkyDrive国际版的Dubox干净易用,但没有机会关注与国内用户之间的微信官方帐户。

回复“ 1024”在后台查看更多内容,请在“按照规定加入技术交流小组。

长按可转到图片中包含的官方帐户,以关注免责声明:此文章的内容