| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2647 人关注过本帖, 1 人收藏
标题:[误区] A*=B 不等价于 A=A*B (此贴主要表达C语言对上述两式的不同处理方 ...
只看楼主 加入收藏
jmjy
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:44
专家分:146
注 册:2010-1-7
收藏
得分:0 
此回复被和谐。

[ 本帖最后由 jmjy 于 2010-4-24 23:26 编辑 ]
2010-04-24 22:41
hackerjiang
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:3
帖 子:780
专家分:111
注 册:2007-4-27
收藏
得分:0 
回复 21楼 jmjy
我当时以为 C编译器是将表达式 A*=B 转换成 A=A*B ,然后进行计算赋值。前者写法只是为了方便而已。
而事实上,C编译器对于表达式 A*=B 的处理,是先将等号右边看作一个整体进行处理。
这就是我要表达的意思,即表达式 A*=B 并不等价于 A=A*B ,因为C编译器对它们的处理方式的确不一样。

当然,这也能成为一个“宏定义不规范”的好例子。

(づ ̄ 3 ̄)づ
2010-04-24 23:07
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
#define 本来就是简单替换 别指望有什么高级功能~
2010-04-24 23:10
jmjy
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:44
专家分:146
注 册:2010-1-7
收藏
得分:0 
回复 22楼 hackerjiang
#include "stdio.h"

#define Hong01 5   /*写程序,经常会定义宏,方便修改*/
#define Hong02 Hong01+100
int main()
{
    int a=2;
    a=a*Hong02;    /* 替换成 a*=hong02 */
    printf("%d\n",a);
    return 1;
}
    虽然说LZ改了几次了。。不过好像还是有点马大哈~~~~
    现在明白LZ的意思了,我觉得LZ在主题中没表达的很清楚,以致我读了两遍后,感觉就是,你在误导~~
    A*=B;B是式子的时候会当成整体,此时不等同于 A=A*B。。。
 不过LZ因这个犯过错~~~让我很震精。。。
2010-04-24 23:25
jmjy
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:44
专家分:146
注 册:2010-1-7
收藏
得分:0 
以下是引用zklhp在2010-4-24 23:10:40的发言:

#define 本来就是简单替换 别指望有什么高级功能~
版主大人,宏的确只是个简单的替换,没有什么。。不过它能造就很多高级功能。
多少人因为#define 出错了都不知道怎么回事你知道不?
2010-04-24 23:29
红色杀戮
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:12
专家分:7
注 册:2009-7-25
收藏
得分:0 
啊,以前还没注意,恩,学习啦...
 
九楼
2010-04-25 01:02
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
不是表达式的问题,是宏定义的问题!楼主混淆视听!

[ 本帖最后由 cnfarer 于 2010-4-25 11:00 编辑 ]

★★★★★为人民服务★★★★★
2010-04-25 10:56
快速回复:[误区] A*=B 不等价于 A=A*B (此贴主要表达C语言对上述两式的不同处 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016438 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved