c语言宏定义里带参数是什么意思?

 我来答
匿名用户
2013-12-20
展开全部
C的宏可以用来替换常数,替换表达式,仔细把这个程序看完你就明白了,
#include<stdio.h>

#define SQ(x) ((x)*(x))
#define READ(x) scanf("%d",&x)
#define WRITELN(x) printf("%d\n",x)

int main()
{
int x;
READ(x);
WRITELN(SQ(x+1));
return 0;
}
程序输入4 输出25
追问
#include 
#define LEAP_YEAR(y) y%400
int main()
{ int y;
scanf("%d",&y);
if (y%4==0&&y%100!==0||
LEAP_YEAR(y)==0)
printf("%d is a leap year.",y);
else printf("%d is not a leap year.",y);
return 0;
}
我这个什么地方错了?
追答
闰年的规则不完善 还有y最好要有括号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-20
展开全部
比如#define max(a,b) ((a)>(b)?(a):(b))
追问
#include 
#define LEAP_YEAR(y) y%400
int main()
{ int y;
scanf("%d",&y);
if (y%4==0&&y%100!==0||
LEAP_YEAR(y)==0)
printf("%d is a leap year.",y);
else printf("%d is not a leap year.",y);
return 0;
}
我这个什么地方错了?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
月夜阑干
2013-12-20 · 超过19用户采纳过TA的回答
知道答主
回答量:67
采纳率:0%
帮助的人:44万
展开全部
格式:
#define宏名(参数表) 字符串
例如:#define S(a,b) a*b
area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;
类似于函数调用:
(1)实参如果是表达式容易出问题
#define S(r) r*r
area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;
正确的宏定义是#define S(r) ((r)*(r))
(2)宏名和参数的括号间不能有空格
(3)宏替换只作替换,不做计算,不做表达式求解
(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
(5)宏的哑实结合不存在类型,也没有类型转换。
(6)函数只有一个返回值,利用宏则可以设法得到多个值
(7)宏展开使源程序变长,函数调用不会
(8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
更多追问追答
追问
这个题怎么编,不会用宏定义啊
追答
额,那个题在哪里?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式