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

程序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. c语言 json 请求_怎么用C语言获取JSON中的数据?
  2. Bash的基础知识man手册
  3. grafana安装升级部署
  4. JAVA API在线中文文档地址链接
  5. 理解什么是真正的架构,架构需要的几种思维?
  6. 自己电脑访问跳板机里面的集群中的web ui界面
  7. c语言多个形参,C中子函数最多有几个形参
  8. php swoole 游戏框架,Swoole 高性能php框架
  9. 服务器保持与Mysql的连接
  10. 客户服务器与p2p文件分发,P2P大文件分发技术 | 点量软件
  11. 【论文阅读|深读】Net2Net-NE:Learning Network-to-Network Model for Content-rich Network Embedding
  12. excel--操作使用记录
  13. 怎样计算期货交易盈亏(期货交易盈利怎么算)
  14. 2017风口之变:创业者的焦虑与希望
  15. 根据前序和中序推出后序
  16. 联想Thinkpad E470 笔记本 无声音解决方案
  17. 2023阿里云服务器租用价格CPU/内存/带宽/系统盘收费标准
  18. CF1633D Make Them Equal 题解
  19. MATLAB 画图--图形属性设置
  20. 网页平面设计/广州平面UI设计培训就业班课程

热门文章

  1. x265-common.h
  2. java 并发测试程序_java并发编程实战:第十二章---并发程序的测试
  3. java 短信猫发送短信的方法
  4. Struts2与Spring集成中的自动装配策略
  5. 用Spring更好地处理Struts动作三种整合
  6. [bzoj2743]采花
  7. 最长公共子序列(稀疏序列)nlogn解法
  8. 订餐系统之自动确认淘点点订单
  9. Jquery 三种方法获取取Checkbox是否选中
  10. 基于ArcSDE、Oralce空间数据库冷备份与恢复