c语言:宏里面参数不加括号容易出错,在使用时尽量加括号及举例
宏里面参数不加括号容易出错,在使用时尽量加括号
程序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语言:宏里面参数不加括号容易出错,在使用时尽量加括号及举例相关推荐
- c 语言 宏 可变 参数,利用C可变参数和宏定义来实现自己的日志系统
在嵌入式应用的开发过程中,日志系统是非常重要的! 特别是在生产环节出现了偶发性的.与当前的执行环境相关的bug的时候, 如果没有日志系统来追踪问题,很难进行问题重现. 因此,实现一个自己的日志系统是很 ...
- c语言 宏 不定参数,C宏定义不定参数
1.# 假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预 处理运算符,它可以把语言符号转化程字符串.例如,如 果x是一个宏参量,那么#x可以把参数名转化成相 ...
- c 语言 宏 默认参数,C/C++预处理宏可以使用默认参数值吗?
您正在寻找一个宏示例过载机制. Boost.PP's facilities. #define MACRO_2(a, b) std::cout << a << ' ' <& ...
- c 语言 宏 可变 参数,C语言 如何在宏定义中使用可变参数
有一个记录日志的函数,想用宏定义进行包装,简化调用方法,但是xlc报如下的错误:void _log(const int level, char* file, int line, const char* ...
- python内函数名加括号和不加括号的区别,python中 函数名加括号与不加括号
Maven之自定义archetype生成项目骨架(一) Maven之自定义archetype生成项目骨架(一) 标签: mavennexus插件 2015-07-15 16:40 2443人阅读 评论 ...
- scala的无参函数什么时候加括号,什么时候不加括号
在scala语言中,没有参数的函数可以加括号也可以不加括号.有什么区别呢? 有括号的函数调用时可以加括号也可以不加括号 不带括号的函数调用时一定不能加括号 那么具体什么情况下写无参的函数加括号,什么时 ...
- c语言宏函数怎么传递宏参数_C语言中的宏参数评估
c语言宏函数怎么传递宏参数 We can define a function like Macro, in which we can pass the arguments. When a Macro ...
- #define宏加括号和不加括号的区别
#define 宏是在代码中不加任何验证的直接替代,当宏中包含运算符时要在最外层加括号,不然可能会出错 下面使用一个简单的例子来验证一下,代码中定义一个求两个数中最大数的宏: MAX_wrong在外层 ...
- c语言宏编译命令大全,C语言宏定义与预编译详解
http://blog.csdn.net/findaway123/article/details/6994203 2011 1.宏定义和函数的区别 -------------------------- ...
最新文章
- 学javascript有哪些开发工具
- Linq之延迟加载特性
- [MySql] - 开启外部访问
- python3 hasattr getattr setattr delattr 对象属性 反射
- 116. 飞行员兄弟【二进制枚举】
- TCP连接之未连接队列的理解[转]
- python 彩票 遗漏值_荐Python遗漏知识点一
- DM6467T开发板领航——dmai经验谈
- scalar parameter xxxxx created globally in function xxxx
- AspNetCore中使用Ocelot之 IdentityServer4
- RT-Thread 学习笔记(四)——添加RTGUI组件
- C++/C--在堆栈中使用数组的区别
- 一.对ThreadLocal的理解
- 在竞赛中不断成长--(广油最帅的崽)行走的皮卡丘
- cisco wlan 控制器配置
- 三菱FX系列PLC备份电池电压低报警的处理方法
- 人工神经网络技术基础
- 【openGL2021版】粒子系统(全)
- 通过AOP实现全局日志打印
- 使用命令行删除垃圾广告推送服务(windows)
热门文章
- 15.5 匿名内部类
- 得到照片_大叔偷别人羞羞的照片画画,添油加醋后,却得到无数人点赞!
- mysql知识测试_MySQL基础知识测试
- SWIFT(Society for Worldwide Interbank Financial SWIFT Telecommunications---环球同业银行金融电讯协会)
- 公司行为(Corporate Actions)
- 信息安全风险评估实施
- HttpClient的简单使用
- Print out Android kernel log
- AGC016B Colorful Hats(构造)
- 应用程序框架实战三十六:CRUD实战演练介绍