2

-fpermissiveGCC 4.6 (with ) で正常にコンパイルされる一部のレガシー コードでは、次のようになります。

uint16_t a = 0;
void* b = ...;

if(b == a) // ...

この比較は GCC 4.6 で明確に定義されていますか? 16 ビットにダウンキャストするか、32/64 ビットにアップキャストしますか?

4

3 に答える 3

1

ポインタのサイズに合わせて 16 ビット整数をアップキャストしているようです。次のコード出力を実行する"upcast"

uint16_t a = 1;
void* b = (void*)0x10001;
(b == a) ? printf("downcast") : printf("upcast");
于 2014-04-04T13:50:44.900 に答える