其他
C语言之预定义符号
/***首先聊一聊***/
首先我们聊一下什么是预定义标识符,预定义标识符是在预编译期间,通过编译器把我们规定的符号转化为我们想要数据,首先要明确一点的是,该预定义符号一定是在预编译阶段所完成的一项工作,而非正式编译阶段!这一点在我们平时调试程序的时候,能够起到一定的作用!
/***具体聊一聊预定义标识符***/
1)__FILE__:表示的是进行编译的源文件名称,比如在uart.c这个文件中需要输出带文件名的调试信息,就可以使用printf("%s",__FILE__);这样就可以输出uart. c,来为我们调试定位问题。
2)__DATE__:表示文件被编译的日期,格式的话是字符串,具体格式可以自己实验查看,一般是月日年。
3)__TIME__:表示的是文件被编译的时间,也是输出字符串格式,一般是时分秒,该预定义符号和上面的日期可以一起配合进行代码的版本管控!非常好用!
4)__LINE__:表示的是方面符号所处的代码行号,输出的格式是整形!该预定义标识符__FILE__进行配合使用我们可以用来定位到代码中的具体一行!也是非常妙的!
5)__STDC__:如果编译器支持ANSI C标准,那么该值为1,否则没有定义!该符号一般用得不是太多!
哈哈,大家可能会奇怪为什么突然今天讲预定义符号,其实最近在查找bug的时候,经常遇到同样类型的bug,比如说数组越界等,所以其实很多bug都是可以通过我们在调试过程中在程序中安插监控语句进行排查出来的!比如说我们对函数参数范围的把控等,就可以通过assert断言来处理!
好,那这里我就分享一下我经常用到的调试语句:
#define SupportDebug#ifdef SupportDebug
#define DebugLog(log) \
printf("File:%s,Line:%d"log,__FILE__,__LINE__)
#else
#define DebugLog(log)
#endif
那我这里简单解析一下上面这个宏定义,上面通过定义supportDebug来区分程序是debug版本还是release版本,通过宏定义可以加快我们release程序的运行速度,同时需要查找bug的时候可以将其打开进行日志信息的查看!
好了,这里是公众号"最后一个bug",感谢各位的关注,后面我会继续根据经验发布更多的文章!