32bit コンパイラで long long 書式に int 型変数で出力すると上位dword が初期化されない件
#include <stdio.h> void main(){ int x=0x123; printf("[%016llx]\n", 0xaaaaaaaaaaaaaaaa); printf("[%016llx]\n", x); printf("[%016llx]\n", 0x54321234567); printf("[%016llx]\n", x); printf("[%016llx]\n", 0xbbbbbbbbbbbbbb); } |
問題のコード。64bit コンパイラと32 bit コンパイラで結果を比較してみよう
[aaaaaaaaaaaaaaaa] [aaaaaaaa00000123] [0000054321234567] [0000054300000123] [00bbbbbbbbbbbbbb] |
[aaaaaaaaaaaaaaaa] [0000000000000123] [0000054321234567] [0000000000000123] [00bbbbbbbbbbbbbb] |
32bitの場合は long longで int を参照した箇所の上位 DWORD が前の変数の値のまま初期化されていないことが分かる。
バグですね (((・ω・))) ※ 2019/11の gcc 8.3.1の不具合
Comments