
| ✨博客主页 | ||
|---|---|---|
| 何曾参静谧的博客 | ||
| 📌文章专栏 | ||
| 「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")。
这些预处理宏在调试、日志记录、代码生成等方面非常有用,因为它们提供了源代码级别的信息,有助于开发者定位和修复问题。请注意,这些宏的值是在编译时确定的,因此它们不能用于在运行时动态地获取源代码信息。
