✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「C/C++」C/C++程序设计 | ||
📚全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
「Math」探秘数学世界 |
目录
- 1. `__LINE__`:
- 2. `__func__`
- 3. `__DATE__`:
- 4. `__TIME__`:
- 5. `__cplusplus`:
- 6. `#line`(这是一个指令,而不是一个宏,但它与行号信息相关):
在C++中,__FILE__
是一个常用的预处理宏,它用于获取当前文件的名称(字符串字面量)。除了 __FILE__
之外,C++ 还提供了一些其他常用的预处理宏,它们可以帮助开发者在编译时获取有关源代码的信息。以下是一些常用的预处理宏:
1. __LINE__
:
- 用途:获取当前代码行号(整数常量)。
- 示例:
#include <iostream> int main() { std::cout << "Line: " << __LINE__ << std::endl; return 0; }
2. __func__
(C++11及更高版本中推荐使用,部分编译器也支持__FUNCTION__
作为非标准但广泛支持的替代):
- 用途:获取当前函数的名称(字符串字面量)。
- 示例:
#include <iostream> void foo() { std::cout << "Function: " << __func__ << std::endl; }
3. __DATE__
:
- 用途:获取当前文件的编译日期(字符串字面量,格式为 “Mmm dd yyyy”)。
- 示例:
#include <iostream> int main() { std::cout << "Date: " << __DATE__ << std::endl; return 0; }
4. __TIME__
:
- 用途:获取当前文件的编译时间(字符串字面量,格式为 “hh:mm:ss”)。
- 示例:
#include <iostream> int main() { std::cout << "Time: " << __TIME__ << std::endl; return 0; }
5. __cplusplus
:
- 用途:这是一个预定义的宏,当编译器以C++模式编译时,它会被定义。其值通常为某个表示C++标准版本的整数(如199711L表示C++98标准)。
- 示例:
#ifdef __cplusplus extern "C" { /* C代码 */ } #endif
(用于在C++代码中嵌入C代码,以确保C代码以C的方式编译)。
6. #line
(这是一个指令,而不是一个宏,但它与行号信息相关):
- 用途:改变
__LINE__
和(在某些编译器中)__FILE__
的值。这通常用于代码生成器或编译器前端,以在生成的代码中提供有意义的行号信息。 - 示例:
#line 100 "newfile.cpp"
(将__LINE__
的值更改为100,并将__FILE__
的值更改为"newfile.cpp")。
这些预处理宏在调试、日志记录、代码生成等方面非常有用,因为它们提供了源代码级别的信息,有助于开发者定位和修复问题。请注意,这些宏的值是在编译时确定的,因此它们不能用于在运行时动态地获取源代码信息。