gpt4 book ai didi

编译C代码: error: lvalue required as left operand of assignment

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:58 24 4
gpt4 key购买 nike

当我尝试在 gcc 4.4.5 上编译一些代码时,gcc 在这一行遇到错误:

ORG(e) = DEST(a);

这 2 个宏定义为:

#define ORG(e) ((site_struct *) ODATA(e))
#define DEST(e) ((site_struct *) DDATA(e))

我在 solaris 上用 gcc 3.4.5 编译这个没有问题。

我一直在试图找出为什么它不会编译很长一段时间但无济于事。谁能指出我正确的方向?


来自评论:

ODATA 和 DDATA 定义为:

#define ODATA(e) ((edge_struct *)((e)&0xfffffffcu))->data[(e)&3]
#define DDATA(e) ((edge_struct *)((e)&0xfffffffcu))->data[((e)+2)&3]

最佳答案

我很难相信您可以在 Solaris 上编译它。作业的左侧是强制转换的结果。 C 语言中强制转换的结果总是右值。您不能将任何东西分配给右值。它简单没有意义。右值不是对象。它们不存储在内存中,这就是为什么尝试将任何东西分配给右值是没有意义的。这是 C 的一个非常基本的事实,这就是为什么我不敢相信你可以用任何 C 编译器编译它。

例如这段代码

int i;
(int) i = 5; /* ERROR */

无法编译的原因与您的代码无法编译的原因相同。

很难“为您指明正确的方向”,因为您完全不清楚您要做什么。这个任务应该是什么意思?为什么要在作业的两边都进行转换?

关于编译C代码: error: lvalue required as left operand of assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5879054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com