C/C++ 预定义宏整理
1. 编译时间相关
__DATE__:当前编译的日期,格式为 "Mmm dd yyyy"(如 "Feb 25 2025")。
__TIME__:当前编译的时间,格式为 "hh:mm:ss"(如 "14:30:15")。
__TIMESTAMP__(某些编译器支持,如 GCC):文件最后修改的时间,格式通常为
"Day Mmm dd hh:mm:ss yyyy"(如 "Tue Feb 25 14:30:15 2025")。
2. 代码文件和行号
__FILE__:当前源文件的名称,通常包含完整路径(如 "C:/Project/main.cpp")。
__LINE__:当前行号(如 42)。
__func__(C99 及 C++11 以上):当前函数的名称。
3. 编译器和标准
-
__cplusplus(仅 C++):定义了 C++ 标准的版本,例如:
199711L(C++98)
201103L(C++11)
201402L(C++14)
201703L(C++17)
202002L(C++20)
202302L(C++23)
-
__STDC__(仅 C):如果定义了,则表示是符合 ANSI C 标准的编译器。
-
__STDC_VERSION__(C99 及以上):C 语言标准的版本,如:
199409L(C90 修订版)
199901L(C99)
201112L(C11)
201710L(C17)
-
__GNUC__(GCC 编译器):GCC 版本号,如 __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__。
-
_MSC_VER(MSVC 编译器):Microsoft 编译器版本号。
4. 其他
__FUNCTION__(GCC / Clang / MSVC):与 __func__ 类似,但 MSVC 仅支持 __FUNCTION__。
__PRETTY_FUNCTION__(GCC / Clang):比 __func__ 更详细,包含完整的函数签名。
_Pragma()(C99 及 C++11 以上):比 #pragma 更灵活,可在宏定义中使用。
示例代码
#include <cstdio>
int main() {
printf("Compiled on %s at %s\n", __DATE__, __TIME__);
printf("File: %s, Line: %d, Function: %s\n", __FILE__, __LINE__, __func__);
return 0;
}
编译后运行的输出示例
Compiled on Feb 25 2025 at 14:30:15
File: C:/Project/main.cpp, Line: 6, Function: main
这样可以帮助你在日志或调试信息中追踪编译信息和代码位置。
|