C++ 基础 - 常用宏定义
概述
https://www.techiedelight.com/zh/find-name-of-the-calling-function-in-cpp/
编译器内置宏:
ANSI C标准中有几个标准预定义宏(也是常用的):
- LINE:在源代码中插入当前源代码行号;
- FILE:在源文件中插入当前源文件名;
- DATE:在源文件中插入当前的编译日期
- TIME:在源文件中插入当前编译时间;
- STDC:当要求程序严格遵循ANSI C标准时该标识被赋值为1;
- __cplusplus:当编写C++程序时该标识符被定义,例如__cplusplus199711,__cplusplus201103。
- FUNCTION:调用函数的名称
编译器在进行源码编译的时候,会自动将这些宏替换为相应内容。
标识符__LINE__和__FILE__通常用来调试程序;
标识符__DATE__和__TIME__通常用来在编译后的程序中加入一个时间标志,以区分程序的不同版本;
这四个都是预编译宏,不是包含在头文件中的:
- __FILE__是当前编译的文件的文件名 是一个字符串
- __TIME__是当前编译的文件的编译时间 格式是hh:mm:ss 是字符串
- __DATE__是当前编译的文件的编译日期 格式是Mmm:dd:yyyy 是字符串
- __LINE__是调用该宏语句所在的行数,是个十进制数
应用场景:在后台程序运行出问题时,详尽的日志是必不可少的,这里提供一个能自动记录日志触发点文件名、行号、函数名的方法,通常在日志系统中使用。
示例
示例:
DETAILS
#include <iostream>
using namespace std;
int main()
{
cout << "__LINE__" << __LINE__ << endl;
cout << "__FILE__" << __FILE__ << endl;
cout << "__DATE__" << __DATE__ << endl;
cout << "__TIME__" << __TIME__ << endl;
cout << "__STDC__" << __STDC__ << endl;
cout << "__cplusplus" << __cplusplus << endl;
cout << "__FUNCTION__" << __FUNCTION__ << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
执行结果:
DETAILS
[root@VM-16-6-centos multidefine]# g++ test1.cpp -o test1 [root@VM-16-6-centos multidefine]# ./test1 LINE: 6 FILE: test1.cpp DATE: Feb 20 2023 TIME: 14:23:31 STDC: 1 __cplusplus: 201402 FUNCTION: main
[root@VM-16-6-centos multidefine]# g++ test1.cpp -o test1 --std=c++11 [root@VM-16-6-centos multidefine]# ./test1 LINE: 6 FILE: test1.cpp DATE: Feb 20 2023 TIME: 22:19:39 STDC: 1 __cplusplus: 201103 FUNCTION: main