> int型はターゲットの一番処理しやすいサイズになるのだと
> 思っていたのですが間違っているでしょうか?
大間違いです!
> あっている場合、コンパイラで差が出るんでしょうか?
> OS(Windowsとか)のアプリを作成するコンパイラは、色々
> あるのかもしれませんが、組み込み関係に限定してという事で。
H8だけなら、良いんですが、移植性に優れていると
謳われているのに、ここんとこは、随分Cの実装にも
違いが有るし、データー幅を拡張する際の扱いがCP
U毎に違っているので、油断できないのです。
H8 は見かけに依らず32ビット幅のレジスターを持っており
8−>16、16−>32の変換は符号付整数扱いでは、
MSBが 1 だと 拡張したデーターが0xFF、0XFFFF
になり、何だかなぁ〜なんです。
char c;
int i;
i=c; c=0x7f ,i=0x007f
c=0x80 ,i=0xFF80
H8 だと、こうなります。 意図してましたか?
これが SH2,3 だと 扱いが異なります。
8 char
8 unsigned char
16 short int
16 unsigned short int
32 long int
32 unsigned long int
と、毎度サイズとMSB(符号)の扱いを意識して定義
しないで、 int を使う癖は早く直しておかないと
後からバグが追いかけてきますね。
実は、私はこれで泣かされています。
> int16, int32, int64, ...
>を定義してint, short, long, ...を、
> 使わないようにするかですね。
これって、LINUX で見かけますね。 符号を明記しないと
駄目な H8 では 素直に 上記6種を使ったほうが混乱
しないと思います。
〒226-0002 横浜市緑区
東本郷 6-17-1-602
オンボード 杉本 秀夫
Tel:045-473-7678 Fax:474-5351
http://www02.so-net.ne.jp/~ob_henry