C语言的_FUNCTION_ _FILE_ 和_LINE_宏定义

本文介绍了C语言中的五个预定义宏:__FILE__、__LINE__、__DATE__、__TIME__ 和 __FUNC__。这些宏在编译时被替换为实际值,如文件名、行号、日期和时间等,对于程序调试和版本管理非常有用。

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

转载:https://www.cnblogs.com/zhaojk2010/p/4501375.html

在C语言中,有这么四个预定义的宏:

当前文件: __FILE__

当前行号: __LINE__

当前日期: __DATE__

当前时间: __TIME__

当前函数: __FUNC__

这4个宏在代码编译的时候,由编译器替换成实际的值或字符串。

下面演示一段代码,编译一个代码: test.c

1 #include <stdio.h>
2 void main()
3 {
4     printf(" %s \n %d \n %s \n %s \n",__FILE__,__LINE__,__DATE__,__TIME__);
5 }

运行结果:

 test.c 
 4 
 May 13 2015 
 18:47:05

只有行号是整数,其他3个都是字符串,用起来很方便吧!

调试程序的时候 __FILE__,__LINE__ 很有用;

在确认程序编译时间(版本参考)的时候 __DATE__,__TIME__ 很有用。

### 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、付费专栏及课程。

余额充值