C语言宏定义

C语言中用宏定义的一般形式: #define   宏名   字符串;带参数的宏定义 :#define      宏名(参数列表)   字符串,宏名与形参列表之间不可有空格。

宏的调用,仅是将宏的字符串代换程序中的宏名,(带参数的宏不仅要宏展开还要用实参代换形参,不存在值传递,) 。

带参宏定义和函数的区别:

【示例①】用函数计算平方值。

   
   
  1. #include <stdio.h>
  2. int SQ(int y){
  3. return ((y)*(y));
  4. }
  5. int main(){
  6. int i=1;
  7. while(i<=5){
  8. printf("%d^2 = %d\n", (i-1), SQ(i++));
  9. }
  10. return 0;
  11. }
运行结果:
1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 = 25

【示例②】用宏计算平方值。

   
   
  1. #include <stdio.h>
  2. #define SQ(y) ((y)*(y))
  3. int main(){
  4. int i=1;
  5. while(i<=5){
  6. printf("%d^2 = %d\n", i, SQ(i++));
  7. }
  8. return 0;
  9. }
VC 6.0下运行结果:
1^2 = 1
3^2 = 9
5^2 = 25

分析如下:在示例①中,函数调用是把实参 i 值传给形参 y 后自增 1,然后输出函数值,所以要循环5次,输出1~5的平方值。而在示例②中宏调用时只作代换,SQ(i++) 被代换为 ((i++)*(i++))。第一次循环,i 的值为1,(i++)*(i++)=1;第二次循环 i 的值为 3,(i++)*(i++)=9;第三次循环 i 的值为 5,(i++)*(i++)=25;第四次循环,i 的值为7,终止循环。

从以上分析可以看出函数调用和宏调用二者在形式上相似,在本质上是完全不同的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值