浅谈关于C语言中# define的副作用

  

MFC虽然没有未来,但是我觉得MFC的思想还是有必要研究研究的,在MFC中或者一些底层代码的编写中,宏是相当好用的,为什么呢?因为宏只是简单的替换,不进行类型转换,替换就意味着灵活,而C语言编程的灵魂就是灵活啊。
  

  

但是在高级语言中,甚至c++中,是提倡用常量的,不提倡用#定义,因为#定义有一定的副作用,玩不好就没命了。
  这里我们讨论下# define的副作用。

        # include & lt; stdio.h>   # include & lt; stdlib.h>   #定义CALL_WITH_MAX (a, b) f ((a)在(b) & # 63;(一):(b))   int主要(空白)   {   int=5;   int b=0;   CALL_WITH_MAX (+ + a, b);   CALL_WITH_MAX (+ + a, b + 20);   返回0;   }   之前      

分析:
  上面的问题,不知道大家有没有看出来。
  对于CALL_WITH_MAX (+ + a, b);

  

1,首先加1,变成了6

  

2,再和b进行比较,结果是大,最后返回的结果是(+ +),又被加1,最后的结果是7

  

,对于CALL_WITH_MAX (+ + a, b + 20);

  

1,首先加1,变成了8
  2,再和b进行比较,结果是大,最后返回的结果是b,此时的b为20,那么一只加了一次,一个的结果是8

        # include & lt; stdio.h>   # include & lt; stdlib.h>   #定义CALL_WITH_MAX (a, b) f ((a)在(b) & # 63;(a) (b)):   空白f (int x)   {   printf("比较结果=% d \ n”, x);   }   int主要(空白)   {   int=5;   int b=0;   printf(“初始值=% d \ n ", 1);   CALL_WITH_MAX (+ + a, b);   printf (" excute第一=% d \ n \ n ", 1);   printf(“初始值=% d \ n ", 1);   CALL_WITH_MAX (+ + a, b + 20);   printf (" excute第二=% d \ n \ n ", 1);      返回0;   }      

结果分析如下:

  

浅谈关于C语言中# define的副作用“> </p>
  <p>以上所述是小编给大家介绍的关于C语言中# define的副作用详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持! </p><h2 class=浅谈关于C语言中# define的副作用