|
分類:[その他の言語]
いつもお世話になっています。ネタ好き事インドリです。
今回は、D言語の共用体についてどうしても分らない事があるので皆様にお聞きしたくて投稿します。
C言語で次の共用体を使ったサンプルコードは意図どおりに動作します。
#include "stdafx.h"
union Register {
public:
unsigned char AH;
unsigned short AX;
unsigned int EAX;
}reg;
int _tmain(int argc, _TCHAR* argv[])
{
reg.EAX = 0xAAAAEEAA;
printf( "EAX=%x\n", reg.EAX);
printf( "AX=%x\n", reg.AX);
return 0;
}
しかしこれと同等のD言語の共用体のコードは動作しません。
挙動が構造体にしか思えません。
import std.stdio;
union Register {
public:
ushort AX;
uint EAX;
}
int main( char[][] ) {
Register reg;
reg.EAX = 0x_AAAA;
writef( "EAX=%x", reg.EAX, "\n" );
writeln( "AX=", reg.AX ); //AAではなく0となる。
reg.AX = 5; //これでAA05になるはずだけど・・・
writef( "EAX=%x", reg.EAX, "\n" ); //AAAAになる。
writeln( "AX=", reg.AX ); //5と出力される。
return 0;
}
開発環境はdmd2.014です。
この共用体のバグの直し方や、間違っている点を指摘してくださる方お待ちしております。
|