gpt4 book ai didi

c - uint8 的冗余转换不适用于 GCC 4.8.1

转载 作者:太空狗 更新时间:2023-10-29 15:00:43 24 4
gpt4 key购买 nike

我有一些遗留代码,通常是使用 GCC 3.4.4 为 PowerPC 编译的。现在我正在移植一些我想用 MinGW 的 GCC 4.8.1 编译的代码部分。在代码中的某个时刻,我发现了这一点:

// Prototypes
void foo(uint8* pData);
uint8 bar();

// Function
void foo(uint8* pData)
{
(uint8) *(pData++) = bar(); // Original Code - Doesn't work with GCC 4.8.1
*(pData++) = bar(); // Works with GCC 4.8.1
}

如果我想使用 GCC 4.8.1 编译原始代码中的行,我会得到 lvalue required as left operand of assignment 错误。如果我去掉 cast 运算符,它就可以正常工作。有人可以解释这是为什么吗?那个 Actor 不是多余的而且应该无关紧要吗?为什么它与 GCC 3.4.4 一起工作?

最佳答案

转换运算符的结果不是左值(您可以将其视为具有与原始对象相同的值的临时值,但它具有不同的类型——它只是一个您无法更改的未命名值改变),所以你不能分配给它。

编辑:关于为什么用 GCC 4.3 编译:因为该编译器过于宽松。另外,我假设您没有在启用警告的情况下进行编译。 gcc -Wall 发出以下诊断:

quirk.c: In function ‘main’:
quirk.c:8: warning: target of assignment not really an lvalue;
this will be a hard error in the future

关于c - uint8 的冗余转换不适用于 GCC 4.8.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19677334/

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