|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 关于函数调用
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
699
人关注过本帖
标题:
关于函数调用
只看楼主
加入收藏
燃高
等 级:
论坛游侠
帖 子:67
专家分:140
注 册:2011-12-13
结帖率:
100%
楼主
收藏
已结贴
√
问题点数:5 回复次数:16
关于函数调用
#include<stdio.h>
#define f(x) x*x;
main()
{
int a=6,b=2,c;
int t,k;
int i;
t=f(a);
k=f(b);
c=t/k;
i=(f(a))/(f(b)); // 为什么这里有问题呢!!!!
printf("%d\n",c);
printf("%d\n",i);
}
搜索更多相关主题的帖子:
函数
include
2012-03-16 12:00
举报帖子
使用道具
赠送鲜花
chan_
来 自:武汉
等 级:
论坛游侠
帖 子:84
专家分:122
注 册:2012-2-29
第
2
楼
收藏
得分:0
结果不对?
2012-03-16 12:06
举报帖子
使用道具
赠送鲜花
chan_
来 自:武汉
等 级:
论坛游侠
帖 子:84
专家分:122
注 册:2012-2-29
第
3
楼
收藏
得分:1
i=(f(a)/f(b));
展开之后是
i=(a*a/b*b)
2012-03-16 12:09
举报帖子
使用道具
赠送鲜花
小鱼儿c
等 级:
贵宾
威 望:
14
帖 子:852
专家分:1317
注 册:2011-4-1
第
4
楼
收藏
得分:1
#define f(x) x*x;
我总算知道为什么要小心用宏
你这里多了一个分号。
你正好是这样调用的
i=(f(a))/(f(b)); // 为什么这里有问题呢!!!!
张开:i = (a*a;)/(b*b;)
这样就提示) 多了一个;号了。
但你如果把上面改成i = f(a)-1;
你发现你的i= 36 无论你减多少。
你就发现好神奇。
通过你我发现这个程序可怕性了。要是一个大的项目、你那样定义宏。
要排除BUG 是多么可怕啊。
我们在宏后面加一个;号 也可能啊 我们都习惯这样写程序了。 可能偶尔就这样写了
可怕中啊。。。。。
用心做一件事情就这么简单
2012-03-16 12:39
举报帖子
使用道具
赠送鲜花
embed_xuel
等 级:
贵宾
威 望:
58
帖 子:3845
专家分:11385
注 册:2011-9-13
第
5
楼
收藏
得分:0
#define f(x) ((x)*(x))
总有那身价贱的人给作业贴回复完整的代码
2012-03-16 12:50
举报帖子
使用道具
赠送鲜花
beyondyf
等 级:
贵宾
威 望:
103
帖 子:3282
专家分:12654
注 册:2008-1-21
第
6
楼
收藏
得分:1
这个宏的问题太多了。
分号只是语法级的错误,依然还有逻辑隐患,试试f(a + b)
所以正确的定义方式为
#define f(x) ((x)*(x))
每个括号都不要省掉
重剑无锋,大巧不工
2012-03-16 12:53
举报帖子
使用道具
赠送鲜花
beyondyf
等 级:
贵宾
威 望:
103
帖 子:3282
专家分:12654
注 册:2008-1-21
第
7
楼
收藏
得分:0
嗯?呵呵,又重复了,看来我的打字不够快
重剑无锋,大巧不工
2012-03-16 12:54
举报帖子
使用道具
赠送鲜花
小鱼儿c
等 级:
贵宾
威 望:
14
帖 子:852
专家分:1317
注 册:2011-4-1
第
8
楼
收藏
得分:1
以下是引用
beyondyf
在2012-3-16 12:53:15的发言:
这个宏的问题太多了。
分号只是语法级的错误,依然还有逻辑隐患,试试f(a + b)
所以正确的定义方式为
#define f(x) ((x)*(x))
每个括号都不要省掉
分号不是语言错误吧。
我要把一个东西 替换成东西;
这样也没有错。
宏值简单替换而已。
编译器也不会认为是错的
用心做一件事情就这么简单
2012-03-16 13:04
举报帖子
使用道具
赠送鲜花
wsws23
等 级:
论坛游侠
帖 子:105
专家分:107
注 册:2012-3-13
第
9
楼
收藏
得分:1
回复 6楼 beyondyf
对于f(a+b)的宏定义,他不会执行a+bd的结果,他会这样执行a+b*a+b,和你的预期是不同的。
2012-03-16 13:12
举报帖子
使用道具
赠送鲜花
embed_xuel
等 级:
贵宾
威 望:
58
帖 子:3845
专家分:11385
注 册:2011-9-13
第
10
楼
收藏
得分:0
加分号可以,但实际工作中很少见到宏里带分号的,用的人稍不留神就错了,可能还不会有编译错,想想这种情况,出了问题怎么定位。
总有那身价贱的人给作业贴回复完整的代码
2012-03-16 13:13
举报帖子
使用道具
赠送鲜花
17
1/2页
1
2
快速回复:
关于函数调用
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.034472 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved