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
エラーが発生します。キャスト演算子を取り除くと、正常に動作します。誰かがこれがなぜなのか説明できますか? そのキャストは冗長であり、とにかく重要ではありませんか? また、なぜ GCC 3.4.4 で動作するのですか?