宏里面参数不加括号容易出错,在使用时尽量加括号

程序1:

#include<stdio.h>

#define SQARE(X) X*X

int main()

{

int  n = 10;

int m=SQARE(n);

printf("m=%d\n",m);

return 0;

}

结果:

m=100

请按任意键继续. . .

分析:貌似没有出问题,请看下面两个例子

程序2:

#include<stdio.h>

#define SQARE(X) X*X

int main()

{

int m = SQARE(1 + 3);//1+3*1+3=7

printf("m=%d\n", m);

return 0;

}

结果:

m=7

请按任意键继续. . .

改正程序2:

#include<stdio.h>

#define SQARE(X) (X)*(X)

int main()

{

int m = SQARE(1+3);//(1+3)*(1+3)=16

printf("m=%d\n",m);

return 0;

}

结果:

m=16

请按任意键继续. . .

程序3:

#include<stdio.h>

#define ADD(X) X+X  //不加括号容易出错

int main()

{

int m = 10*ADD(2);//10*2+2

printf("m=%d\n",m);

return 0;

}

结果:

m=22

请按任意键继续. . .

改正程序3:

#include<stdio.h>

#define ADD(X) (X+X)

int main()

{

int m = 10*ADD(2);//10*(2+2)

printf("m=%d\n",m);

return 0;

}

结果:

m=40

请按任意键继续. . .

转载于:https://blog.51cto.com/yaoyaolx/1728067

c语言:宏里面参数不加括号容易出错,在使用时尽量加括号及举例相关推荐

  1. c 语言 宏 可变 参数,利用C可变参数和宏定义来实现自己的日志系统

    在嵌入式应用的开发过程中,日志系统是非常重要的! 特别是在生产环节出现了偶发性的.与当前的执行环境相关的bug的时候, 如果没有日志系统来追踪问题,很难进行问题重现. 因此,实现一个自己的日志系统是很 ...

  2. c语言 宏 不定参数,C宏定义不定参数

    1.# 假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预 处理运算符,它可以把语言符号转化程字符串.例如,如 果x是一个宏参量,那么#x可以把参数名转化成相 ...

  3. c 语言 宏 默认参数,C/C++预处理宏可以使用默认参数值吗?

    您正在寻找一个宏示例过载机制. Boost.PP's facilities. #define MACRO_2(a, b) std::cout << a << ' ' <& ...

  4. c 语言 宏 可变 参数,C语言 如何在宏定义中使用可变参数

    有一个记录日志的函数,想用宏定义进行包装,简化调用方法,但是xlc报如下的错误:void _log(const int level, char* file, int line, const char* ...

  5. python内函数名加括号和不加括号的区别,python中 函数名加括号与不加括号

    Maven之自定义archetype生成项目骨架(一) Maven之自定义archetype生成项目骨架(一) 标签: mavennexus插件 2015-07-15 16:40 2443人阅读 评论 ...

  6. scala的无参函数什么时候加括号,什么时候不加括号

    在scala语言中,没有参数的函数可以加括号也可以不加括号.有什么区别呢? 有括号的函数调用时可以加括号也可以不加括号 不带括号的函数调用时一定不能加括号 那么具体什么情况下写无参的函数加括号,什么时 ...

  7. c语言宏函数怎么传递宏参数_C语言中的宏参数评估

    c语言宏函数怎么传递宏参数 We can define a function like Macro, in which we can pass the arguments. When a Macro ...

  8. #define宏加括号和不加括号的区别

    #define 宏是在代码中不加任何验证的直接替代,当宏中包含运算符时要在最外层加括号,不然可能会出错 下面使用一个简单的例子来验证一下,代码中定义一个求两个数中最大数的宏: MAX_wrong在外层 ...

  9. c语言宏编译命令大全,C语言宏定义与预编译详解

    http://blog.csdn.net/findaway123/article/details/6994203 2011 1.宏定义和函数的区别 -------------------------- ...

最新文章

  1. 学javascript有哪些开发工具
  2. Linq之延迟加载特性
  3. [MySql] - 开启外部访问
  4. python3 hasattr getattr setattr delattr 对象属性 反射
  5. 116. 飞行员兄弟【二进制枚举】
  6. TCP连接之未连接队列的理解[转]
  7. python 彩票 遗漏值_荐Python遗漏知识点一
  8. DM6467T开发板领航——dmai经验谈
  9. scalar parameter xxxxx created globally in function xxxx
  10. AspNetCore中使用Ocelot之 IdentityServer4
  11. RT-Thread 学习笔记(四)——添加RTGUI组件
  12. C++/C--在堆栈中使用数组的区别
  13. 一.对ThreadLocal的理解
  14. 在竞赛中不断成长--(广油最帅的崽)行走的皮卡丘
  15. cisco wlan 控制器配置
  16. 三菱FX系列PLC备份电池电压低报警的处理方法
  17. 人工神经网络技术基础
  18. 【openGL2021版】粒子系统(全)
  19. 通过AOP实现全局日志打印
  20. 使用命令行删除垃圾广告推送服务(windows)

热门文章

  1. 15.5 匿名内部类
  2. 得到照片_大叔偷别人羞羞的照片画画,添油加醋后,却得到无数人点赞!
  3. mysql知识测试_MySQL基础知识测试
  4. SWIFT(Society for Worldwide Interbank Financial SWIFT Telecommunications---环球同业银行金融电讯协会)
  5. 公司行为(Corporate Actions)
  6. 信息安全风险评估实施
  7. HttpClient的简单使用
  8. Print out Android kernel log
  9. AGC016B Colorful Hats(构造)
  10. 应用程序框架实战三十六:CRUD实战演练介绍