如何让gcc / g ++接受像LOBYTE(v15)= someExpression这样的表达式?

时间:2014-11-27 07:20:17

标签: c++ c gcc g++

我有一个反编译函数,想要编译它的源代码。问题出在LOBYTE声明中: 在每一行上得到“错误:左值作为赋值的左操作数”:

LOBYTE(v9) = ((_BYTE)v12 + (v7 ^ v13)) & 0x1F;

请提示解决方法。

2 个答案:

答案 0 :(得分:3)

假设v9是算术类型的对象(问题没有明确说明所涉及的不同标识符/宏的声明),并且系统是little-endian:

#define LOBYTE(x)  (*(unsigned char *) &(x))

允许LOBYTE运算符左侧的=

答案 1 :(得分:0)

我不认为LOBYTE是一个你可以追求一些价值的变量。它是MACRO,它自己返回一个值。在你的作品中,你在[预处理]

之后写了一些类似的东西

5 = 2 * 3

这是不可能的。您在作业=运算符的LHS上需要一些可写内存。

在您的情况下,LOBYTE的可能实施是#define LOBYTE(x) ((unsigned char) ((x) & 0xff)),而不是lvalue。这就是错误存在的原因。


编辑:

关于"如何解决"部分[对不起第一个回答],你需要提供左值作为LOBYTE的结果。

只需添加ouah的答案,您就可以执行类似

的操作
#define LOBYTE(x)  (*(uint8_t *) &(x))

生成所需的左值。