c语言的__LINE__和其它常用宏定义

本文介绍了C语言中预处理宏的使用方法,包括如何利用__LINE__、__func__、__TIME__、__DATE__、__FILE__和__STDC__来获取编译时的行号、函数名、时间、日期、文件名以及编译器遵循的标准等信息。同时展示了#line指令改变__LINE__宏的行为。

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

int main()  
{  
    printf("%d\n",__LINE__);//显示所在行号  
    printf("%s\n",__func__);//显示所在函数  
    printf("%s\n",__TIME__);//显示当前时间  
    printf("%s\n",__DATE__);//显示当前日期  
    printf("%s\n",__FILE__);//显示所处文件名,在源代码中插入当前源代码文件名  
    printf("%d\n",__STDC__);//编译器遵循ANSI C标准时该标识被赋值为1;  
    return 0;  
}  

__LINE__还有另一种用法,可以计算从当前位置开始计算行数

#line 20
int main()			//20  
{  					//21
    int a;			//22	
    int b;			//23
    int c;			//24
    printf("%d\n",__LINE__);//显示所在行号  
    
    return 0;  
}  



  

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

余额充值