免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: kiss007
打印 上一主题 下一主题

【求助】这个左值不能改吗? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-03-30 17:53 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
12 [报告]
发表于 2007-03-30 18:05 |只看该作者
原帖由 kiss007 于 2007-3-30 17:53 发表



void *func(char *buf)
{

    (char*)buf+=2;

....

也无法编译通过
而改成
   buf +=2;
就行。
我想是不是(char*)的问题

嗯,确实我错了
估计是(char *)p在一些编译器下不能当左值

论坛徽章:
0
13 [报告]
发表于 2007-03-30 18:07 |只看该作者
The cast cause the operand value to be converted to the type named within the parentheses. Any permissible conversion may be invoked by a cast expression. The result is not an lvalue.

---C, A reference Manual, p220



  1. #include <stdio.h>

  2. int
  3. main ()
  4. {
  5.         unsigned long a;

  6.         (int) a =1;
  7. }

复制代码

cc 2.c

2.c: In function `main':
2.c:8: warning: use of cast expressions as lvalues is deprecated

[ 本帖最后由 win_hate 于 2007-3-30 18:10 编辑 ]

评分

参与人数 1可用积分 +3 收起 理由
langue + 3

查看全部评分

论坛徽章:
0
14 [报告]
发表于 2007-03-30 18:10 |只看该作者
winhate终于露面了

论坛徽章:
0
15 [报告]
发表于 2007-03-30 18:14 |只看该作者
可以这样理解,强制类型转换首先不可能改变原来变量的类型,所以只能用临时变量来表示所转换类型的变量,也就不可能是左值了

[ 本帖最后由 tyc611 于 2007-3-30 18:15 编辑 ]

评分

参与人数 1可用积分 +3 收起 理由
langue + 3

查看全部评分

论坛徽章:
0
16 [报告]
发表于 2007-03-30 22:44 |只看该作者
>> 上面代码我在sun上cc可以编译通过,而在hp上aCC就不能通过
>> 左值不能修改吗?

问题在于 (char*)buf 不是一个左值表达式,所以根据标准的规定放在等号的左边是非法的。

至于在有的编译器上能够编译通过,那是因为编译器允许这种用法,属于其扩展功能。但是由于这种用法违反了标准,所以现在倾向于不这样使用。例如,以前版本的 GCC 的扩展功能允许这样用,但是从 4.0 版开始已经取消了此扩展功能。

评分

参与人数 1可用积分 +3 收起 理由
langue + 3

查看全部评分

论坛徽章:
0
17 [报告]
发表于 2007-03-31 20:38 |只看该作者
gcc 3好像可以,但是说废弃了 ,gcc4会报错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP