zoukankan      html  css  js  c++  java
  • #define定义宏函数 的正确使用

    如何使用宏来定义一个自定义函数呢?
    首先我们来看下面这段代码

    #define SQUARE(x) x*x
    int main()
    {
    	int a = 5;
    	printf("SQUARE(a): %d
    ",SQUARE(a));	//这个值为25
    	printf("SQUARE(a+1): %d
    ", 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
    ", MAX(a, b));		//很明显,打印的是5.
    	printf("MAX(a&1, b&1): %d
    ", 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

  • 相关阅读:
    简单的代码
    js精度缺失问题
    maven将Jar安装进仓库
    上传图片,手机端压缩
    处理登录时,AJAX的状态码无权限情况
    处理html换行问题
    VMWARE网络配置内网与外网互ping
    hbase和ZooKeeper集群安装配置
    Hadoop集群部署
    redis主从配置+sentinel哨兵
  • 原文地址:https://www.cnblogs.com/tongongV/p/10989680.html
Copyright © 2011-2022 走看看