C语言中的__FUNCTION__,_FILE_和_LINE_用法

本文详细介绍了C/C++中用于定位运行时错误的三个宏:__FUNCTION__、_FILE_和_LINE_。通过实例代码展示了如何使用这些宏来获取错误发生的函数名、文件名及行号,帮助开发者快速定位并解决程序错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C/C++提供了三个宏__FUNCTION__,_FILE_和_LINE_定位程序运行时的错误。程序预编译时预编译器将用所在的函数名,文件名和行号替换。当运行时错误产生后这三个宏分别能返回错误所在的函数,所在的文件名和所在的行号。

不多说,直接上代码和运行结果

1//文件名字叫test.cpp,位于D:\test\下 
#include <stdio.h>
2 
3 int main(int, char**)
4 {
5     printf("This fake error is in \"%s\" on line %d.\n", __FILE__, __LINE__);
6     return 0;
7 }




//运行结果
This fake error is in "C:\temp\test.cpp" on line 4.

 

### C语言 `__location__` 宏的使用 在C语言中,`__location__` 并不是一个标准定义的宏。然而,在某些编译环境中,特别是嵌入式开发环境或其他特定工具链中,可能会遇到类似的宏用于记录源文件的位置信息。 对于常见的GNU编译器集合(GCC),以及微软的Visual Studio 编译器,通常提供了一系列内置宏来实现类似功能[^1]。这些宏可以用来获取当前文件名、行号以及其他上下文信息: - 文件名称可以通过预定义宏 `__FILE__` 获取。 - 行号则通过 `__LINE__` 来表示。 - 函数名称可能依赖于 `_FUNCTION_`, `_ pretty_function _`(注意实际应用时去掉空格),这取决于所使用的编译器版本支持情况[^2]。 如果希望创建类似于 `__location__` 的效果,即组合上述多个位置信息,则可以根据需求自行定义这样的宏。下面是一个简单的例子展示如何构建这样一个宏: ```c #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) #ifdef __GNUC__ // GCC Clang 支持 #define LOCATION "File:" __FILE__ ", Line:" TOSTRING(__LINE__) ", Function:" __PRETTY_FUNCTION__ #elif defined(_MSC_VER) // MSVC 支持 #define LOCATION "File:" __FILE__ ", Line:" TOSTRING(__LINE__) ", Function:" __FUNCSIG__ #else // 默认情况下不包含函数名 #define LOCATION "File:" __FILE__ ", Line:" TOSTRING(__LINE__) #endif ``` 此代码片段展示了根据不同编译器特性定制化输出当前位置的方法。当程序运行并触发该宏所在的地方时,将会打印出相应的文件路径、具体行数及所在的函数签名(如果有)。请注意,不同平台上的表现形式会有所差异,因此建议开发者查阅对应编译器的手册以获得最准确的信息[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值