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
这样可以帮助你在日志或调试信息中追踪编译信息和代码位置。
|