#define定义宏函数 的正确使用
Posted tongongv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#define定义宏函数 的正确使用相关的知识,希望对你有一定的参考价值。
如何使用宏来定义一个自定义函数呢?
首先我们来看下面这段代码
#define SQUARE(x) x*x int main() int a = 5; printf("SQUARE(a): %d\n",SQUARE(a)); //这个值为25 printf("SQUARE(a+1): %d\n", SQUARE(a + 1)); //第一反应是打印36,其实打印的是11
运行结果:
为什么会出现这样的结果呢?原因是编译器在处理SQUARE(a+1)的时候,处理成了 a+1a+1 ,所以a = 5时,最后结果为 11,当我们的宏定义为 #define SQUARE(x) xx 时,结果就是36,那这种宏的定义方法是正确的吗?
再看看下面这段代码:
#define MAX(a,b) (a>b?a:b) int main() int a = 5; int b = 3; printf("MAX(a, b): %d\n", MAX(a, b)); //很明显,打印的是5. printf("MAX(a&1, b&1): %d\n", MAX(a&1, b&)); //这里打印的是5吗?
运行结果如下:
那这又是怎么回事呢?原因是编译器将 MAX(a&1, b&1) 处理为 a&1>b&1?a&1:b&1 ,这里就要考虑运算符的优先级问题了。这篇博客介绍了C语言运算符优先级 。
所以我们可以看到>的优先级高于&,所以运算过程如下图:
总结:宏函数的正确写法是 每一个元素加括号,并且在最外层也加括号,如#define MAX(a,b) ((a)>(b)?(a):(b?).
仅为个人理解,如有错误请指出!
---------------------
作者:故渊~
来源:CSDN
原文:https://blog.csdn.net/lvxin15353715790/article/details/87891991
版权声明:本文为博主原创文章,转载请附上博文链接!
参考链接:
详解宏定义(#define)【转】 - biqioso的博客 - CSDN博客 https://blog.csdn.net/biqioso/article/details/80420152
以上是关于#define定义宏函数 的正确使用的主要内容,如果未能解决你的问题,请参考以下文章
C语言陷阱与技巧第7节,define函数式宏定义不能用普通函数代替吗?为什么要使用do{}while包裹代码