免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3643 | 回复: 15
打印 上一主题 下一主题

C循环计算 ! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-15 10:50 |只看该作者 |倒序浏览
此贴好像是从这里看到了,不记得原帖在哪里了,谁能说明一下这个计算的过程 ?

#include <stdio.h>
#define SQ(y) ((y)*(y))
main()
{
   int i=1;
   while(i<=5)
     printf("%d\n",SQ(i++));

   getch();
}

TC、Win-TC中计算结果都为(原帖是分析了在Linux中的不同计算结果,我这里暂不考虑):
2
12
30


//SQ(y)=( (y)*(y) ),                      i++:先用i,然后i+1

论坛徽章:
0
2 [报告]
发表于 2009-07-15 10:53 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2009-07-15 11:15 |只看该作者
#define SQ(y) ((y)*(y))
while(i<=5)  printf("%d\n",SQ(i++));

i=1, SQ(i++)= ( (y)*(y) ) =  (i=1,但SQ中的参数应是2,即SQ(y)=((y)*(y) )= 2 ×2 = 4,应该是这样啊。。。)
......
......


//只是想知道分析一下这个计算的过程。。。

[ 本帖最后由 onionzq 于 2009-7-15 11:27 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-07-15 11:15 |只看该作者
macro就是字符串替换,自己展开一下看看就明白了。

论坛徽章:
0
5 [报告]
发表于 2009-07-15 12:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2009-07-15 12:23 |只看该作者
结果未定义。

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
7 [报告]
发表于 2009-07-15 13:05 |只看该作者
不同的编译环境产生的结果应该是不同的吧。

论坛徽章:
0
8 [报告]
发表于 2009-07-15 15:00 |只看该作者
个人觉得应该是
((y)*(y));先Y*Y,再自增,因为一个分号才代表一个语句结束

论坛徽章:
0
9 [报告]
发表于 2009-07-15 22:58 |只看该作者
while(i<=5)
     printf("%d\n",SQ(i++));     ---> printf("%d\n",(i++)*(i++));

论坛徽章:
0
10 [报告]
发表于 2009-07-15 23:22 |只看该作者
就是1*2
3*4
5*6嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP