巧用c语言宏定义实现自动注释调试代码,C语言宏定义中的特殊用法

本文介绍了C语言中宏定义的一些特殊用法,包括预定义宏如__DATE__、__TIME__、__FILE__、__LINE__和__func__在调试中的应用,条件编译的实现,如#ifdef、#ifndef、#if、#elif、#else和#endif,以及宏关键字如#undef、#line、#error、#和##的用法。此外,还提到了#pragma的作用和部分用法。
摘要由CSDN通过智能技术生成

C宏定义中的特殊用法

在分析一些C源码时,经常会遇到各种宏定义操作,本文即总结一下C语言宏定义中常见的预定义宏、调试宏;宏的条件编译用法及特殊的宏关键字用法。

#undef 限定宏的作用域

一般来讲宏的作用域从 #define 开始直到文件末尾,但如果需要限定宏的作用域就可以用 #undef 来限定宏的作用域,就是该宏只能作用与 #define … #undef 区间内

常见预定义宏

预定义宏也称为编译器内置宏,这些宏并没有定义在哪个头文件中,而是编译器在预处理时会自动处理这些预定义宏,这里介绍几个常用的预定义宏,其中__func__、__FILE__、__LINE__三个宏在调试时经常用到,来定位bug,为了方便可以自己定义一个DEBUG宏: #define DEBUG printf("%s %s %d\n", __FILE__, func, __LINE__);

__DATE__:代表预处理的日期,预处理器会将其替换为"月 日 年"的字符串形式的时间

__TIME__:代表对源文件当前预编译的时间,预处理器会将其替换为“hh:mm:ss”格式的时间

__FILE__:代表当前预编译的源文件文件名,预处理器会将其替换为当前宏所在的文件名

__LINE__:代表当前所在行号,预处理器会将其替换为当前宏所在的行号

__func__:会替换为当前__func__所在的函数名

如下代码:

void test_1() {

printf("预编译的日期:%s\n", __DATE__);

printf("预编译的时间:%s\n", __TIME__);

printf("预编译的文件:%s\n", __FILE__);

printf("当前所在行号:%d\n", __LINE__);

printf("当前所在函数:%s\n", __func__);

}

执行测试结果:

E:\C_demo>Chong.exe

预编译的日期:Jan 29 2020

预编译的时间:16:54:24

预编译的文件:e:\C_demo\Chong.c

当前所在行号:18

当前所在函数:test_1

宏的条件编译

所谓条件编译,也就是在预编译时,预编译器可以通过 “条件编译” 帮你保留某些代码、以及帮你去掉某些代码,第二阶段编译时就只编译保留的代码,条

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值