c++ 有四个常用的预定义名字,分别为 :__FILE__,__LINE__,__DATE__,__TIME__

c++ 有四个常用的预定义名字,分别为 :__FILE__,__LINE__,__DATE__,__TIME__

__FILE__: 记录文件的路径加名称

__LINE__: 记录文件已经被编译的行数

__DATE__: 记录文件的编译日期

__TIME__: 记录文件的编译时间

__FUNCTION __:当前所在函数名

可以当作变量直接使用 , 一般用作程序调试

例子 :

#include <iostream>

using namespace std;

int main()
{
    cout << "File = " << __FILE__ << '/n'
       << "LINE = " << __LINE__ << '/n'
       << "DATE = " << __DATE__ << '/n'
       << "TIME = " << __TIME__
       << endl; 
    getchar();
}

运行结果 :

File = G:/program/study/c++/test1.cpp
LINE = 17
DATE = May 27 2004
TIME = 09:59:01

C++中除了`__FILE__`和`__LINE__`之外,还存在多个预定义宏,它们在编译时提供有关源代码的上下文信息,广泛用于调试、日志记录和错误诊断等场景。 ### `__FUNCTION__` 或 `__func__` 该宏表示当前函数的名称,通常在函数作用域内使用。虽然`__FUNCTION__`是GCC和MSVC等编译器支持的扩展,但C++11标准引入了`__func__`作为等效的标准化方式。它返回一个`const char*`类型的字符串,表示当前函数的名称。 示例代码如下: ```cpp #include <iostream> void testFunction() { std::cout << "Current function: " << __FUNCTION__ << std::endl; } int main() { testFunction(); return 0; } ``` 输出结果为: ``` Current function: testFunction ``` ### `__DATE__` `__DATE__`宏表示源文件的编译日期,格式为 `"MMM DD YYYY"`,其中 MMM 是月份的缩写(如 Jan、Feb),DD 是日期,YYYY 是年份。该宏通常用于记录程序构建的时间信息。 示例代码如下: ```cpp #include <iostream> int main() { std::cout << "Compiled on: " << __DATE__ << std::endl; return 0; } ``` ### `__TIME__` `__TIME__`宏表示源文件的编译时间,格式为 `"HH:MM:SS"`。它与`__DATE__`一起可用于记录程序构建的具体时间戳。 示例代码如下: ```cpp #include <iostream> int main() { std::cout << "Compiled at: " << __TIME__ << std::endl; return 0; } ``` ### `__cplusplus` `__cplusplus`宏用于检测当前编译器是否以C++模式进行编译。其值是一个整数常量,表示C++标准的版本。例如,C++98 定义为 `199711L`,C++11 定义为 `201103L`,C++17 定义为 `201703L` 等。 示例代码如下: ```cpp #include <iostream> int main() { std::cout << "C++ standard version: " << __cplusplus << std::endl; return 0; } ``` ### `__VA_ARGS__` `__VA_ARGS__`用于定义可变参数宏,允许宏接受可变数量的参数。它通常与`#define`结合使用,用于创建灵活的日志输出宏。 示例代码如下: ```cpp #include <iostream> #define LOG(message, ...) \ do { \ std::cerr << "[LOG] " << __FILE__ << ":" << __LINE__ << " " << message << std::endl; \ } while (0) int main() { LOG("Debug message: %s", "test"); return 0; } ``` ### `__BASE_FILE__` `__BASE_FILE__`宏表示当前编译的主源文件名,通常用于在包含多个头文件时获取顶层源文件的名称。它与`__FILE__`不同之处在于,`__BASE_FILE__`不会随`#include`指令改变。 ### `__INCLUDE_LEVEL__` `__INCLUDE_LEVEL__`宏表示当前源文件的嵌套包含级别,用于指示当前文件是直接编译还是通过`#include`被包含的。主源文件的包含级别为 0,每包含一次头文件,级别递增 1。 ### `__STDC_HOSTED__` `__STDC_HOSTED__`宏用于判断当前编译环境是否为托管环境(即是否支持标准库)。在大多数现代C++编译器中,该宏定义为 `1`。 ### `__OBJC__` 该宏用于检测当前编译的源文件是否包含Objective-C代码,通常用于跨语言项目中进行条件编译。 --- ### 相关问题 1. 如何在C++中实现带文件名和行号的日志输出功能? 2. `__VA_ARGS__`宏在C/C++中有什么作用? 3. 如何在C++中获取当前函数名? 4. `__FUNCTION__`宏是否在所有C++编译器中都支持? 5. C++中有哪些常用预定义宏用于调试和日志记录?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值