Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12404947
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类: C/C++

2011-04-26 21:17:36

1、关于宏的副作用,请看下面代码:
 
  1. #include <stdio.h>

  2. #define GOODDEF (input+3)
  3. #define POORDEF input+3   //这里是宏的副作用最经典的例子,不穿裤子!!!如果你这样用,下面你就知错!!

  4. int main()
  5. {
  6.     int input;
  7.     printf("input first number:");
  8.     scanf("%d",&input);
  9.     printf("after Mul,the 5*GOODDEF=%d,即5*(%d+3)\n",5*GOODDEF,input);

  10.     printf("input second number:");
  11.     scanf("%d",&input);
  12.     printf("after Mul,this 5*POORDEF=%d,即5*%d+3\n",5*POORDEF,input);

  13. // #undef GOODDEF

  14.     printf("input third number:");
  15.     scanf("%d",&input);
  16.     printf("after Mul,the 5*GOODDEF=%d,即5*(%d+3)\n",5*GOODDEF,input);

  17. }
执行效果
 
[root@localhost preProcess]# ./hello

input first number:8
after Mul,the 5*GOODDEF=55,即5*(8+3)
input second number:8
after Mul,this 5*POORDEF=43,即5*8+3
  (上一行出现该结果是因为上面宏定义不穿裤子造成的!!必须引以为戒
input third number:8
after Mul,the 5*GOODDEF=55,即5*(8+3)
[root@localhost preProcess]#
 
 
如果将源码中的 // #undef GOODDEF 打开,会编译出错,如下:
 
hello.c: 在函数‘main’中:
hello.c:21: 错误:‘GOODDEF’未声明(在此函数内第一次使用)
hello.c:21: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
hello.c:21: 错误:所在的函数内也只报告一次。)
 

  从上面的报警信息可以知道,因为GOODDEF 这个宏被撤消,搞得这个GOODDEF 变以了野宏的原因。

 
 
阅读(2046) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

dyli20002011-04-30 20:35:55

wukangwp: 这个世界是金钱推动的 , 哪个语言做东西开发的快, 哪个语言就流行。   没有最好的语言, 只有最合适的语言, 纠结这问题还不如好好研究一下语言的特性, 从工.....
严重鄙视不学无术者到哥的空间发表肤浅之话语!!!!,众博友帮助攻击之

dyli20002011-04-30 20:30:22

,哥我也没有纠结我这问题啊,不知大侠所指为何意?

wukangwp2011-04-30 18:57:45

这个世界是金钱推动的 , 哪个语言做东西开发的快, 哪个语言就流行。   没有最好的语言, 只有最合适的语言, 纠结这问题还不如好好研究一下语言的特性, 从工程角度看问题, 别从学术角度看问题了。
http://www.0992.org