C语言预定义宏 __func____FUNCTION____LINE____FILE____DATE____TIME__
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言预定义宏 __func____FUNCTION____LINE____FILE____DATE____TIME__相关的知识,希望对你有一定的参考价值。
文章目录
今天看RXW源码的时候,看到了在函数里使用
__func__
参数的样例,遂查一下这两玩意的使用方法
这玩意叫做预定义宏
标准C语言预处理要求定义某些对象宏,每个预定义宏的名称为两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。
__LINE__
:当前程序行的行号,表示为十进制整型常量__FILE__
:当前源文件名,表示字符串型常量__DATE__
:转换的日历日期,表示为Mmm dd yyyy 形式的字符串常量,Mmm是由asctime产生的。__TIME__
:转换的时间,表示"hh:mm:ss"形式的字符串型常量,是有asctime产生的。(asctime貌似是指的一个函数)__STDC__
:编辑器为ISO兼容实现时位十进制整型常量__STDC_VERSION__
:如何实现复合C89整部1,则这个宏的值为19940SL;如果实现符合C99,则这个宏的值为199901L;否则数值是未定义__STDC_EOBTED__
:(C99)实现为宿主实现时为1,实现为独立实现为0__STDC_IEC_559__
:(C99)浮点数实现复合IBC 60559标准时定义为1,否者数值是未定义__STDC_IEC_559_COMPLEX__:
(C99)复数运算实现复合IBC 60559标准时定义为1,否者数值是未定义__STDC_ISO_10646__
:(C99)定义为长整型常量,yyyymmL表示wchar_t值复合ISO 10646标准及其指定年月的修订补充,否则数值未定义
示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
printf(" __FUNCTION__: %s\\n", __func__);
printf(" __func__: %s\\n", __func__);
printf(" __LINE__: %d\\n", __LINE__);
printf(" __FILE__: %s\\n", __FILE__);
printf(" __DATE__: %s\\n", __DATE__);
printf(" __TIME__: %s\\n", __TIME__);
return(0);
运行结果:
__func__: main
__LINE__: 8
__FILE__: F:\\Arnold_Test\\20211124_opencvTest\\TEST\\源.cpp
__DATE__: Dec 4 2021
__TIME__: 17:01:48
__func__: main
- 可以通过语句#line来重新设定
__LINE__
的值
示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#line 100
int main()
#line 100
printf(" __LINE__: %d\\n", __LINE__); //__LINE__: 101
printf(" __LINE__: %d\\n", __LINE__); //__LINE__: 102
printf(" __LINE__: %d\\n", __LINE__); //__LINE__: 103
return(0);
但是不知到#line定义在函数外面时,它是怎么计算行的,有点奇怪??
参考文章:C语言中的__FILE__、__LINE__和__func__等预定义跟踪调试
20211231 打印示例
postprocess.cc
printf("FILE[%s] FUNC[%s] LINE[%d]: readlines succeed!\\n", __FILE__, __FUNCTION__, __LINE__);
以上是关于C语言预定义宏 __func____FUNCTION____LINE____FILE____DATE____TIME__的主要内容,如果未能解决你的问题,请参考以下文章
预定义宏__func___Pragma变长参数宏定义以及__VA_ARGS__
C/C++中的__FILE____LINE__#line__func__关键字(预定义宏)