C语言面试题分类->宏定义

本文介绍了C语言中的宏定义技巧,包括实现最小值宏、字符串化宏参数、宏参数连接及do...while(0)的使用场景。同时给出了一个实用的例子,展示了如何定义一个常数来表示一年中的秒数。

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

1.写一个“标准”宏,这个宏输入两个参数并返回较小的一个

:#define MIN(x, y) ((x)<(y)?(x):(y))//注意x,y要加括号,因为x,y如果有复合运算会出现问题。

2.宏定义中#与##的作用?

答:#是把宏参数转化为字符串的运算符,##是把两个宏参数连接的运算符。

例如:

 

#define STR(arg) #arg          则宏STR(hello)展开时为”hello”

 

#define NAME(y) name_y      则宏NAME(1)展开时仍为name_y

 

#define NAME(y) name_##y    则宏NAME(1)展开为name_1

 

#define DECLARE(name, type) typename##_##type##_type,

 

则宏DECLARE(val, int)展开为int val_int_type

3.宏定义中do...while(0)的作用?

答:do{...}while(0)在C中是唯一的构造程序,让你定义的宏总是以相同的方式工作,这样不管怎么使用宏(尤其在没有用大括号包围调用宏的语句),宏后面的分号也是相同的效果。即宏定义有分号时使用do...while(0)。可以有效保证宏执行一次,且不会影响代码逻辑。

4.1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
  
答:#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL   最后的UL代表无符号整数。

 

转载于:https://www.cnblogs.com/mcy0808/p/8674834.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值