1

ここで私の質問に対する詳細な回答を得られませんでした。違う角度から考えてみようと思いました。

C99の固定幅整数型の基になる型を決定するために使用される選択基準を誰かが説明できますか?

[u]int_fast[n]_t
[u]int_least[n]_t
[u]int[n]_t

特定のプロセッサで、'long' と 'int' が同じサイズ (sizeof(int) == sizeof(long)) である場合、なぜ 'int' よりも 'long' を使用したり、その逆にする必要があるのでしょうか。

4

1 に答える 1

5

の作者の気まぐれ<stdint.h>

intとが同じサイズであることを考えると(そして、それらが同じ表現と他の特性を持っていると仮定すると)、型が標準の要件を満たしている限り、longどちらが を定義するために使用されるかはまったく問題になりません。[u]int_{,_fast,_least}32_t

まあ、それは完全に真実ではありません。場合によっては違いが生じる可能性があります。 intlongは、同じサイズであっても、依然として別個の互換性のない型です。たとえば、int32_ttypedefasintまたは asのいずれかでlongある場合、次のプログラムは次のようになります。

#include <stdint.h>
#include <stddef.h>
int main(void) {
    int32_t *p32 = NULL;
    int  *ip = p32;
    long *lp = p32;
    return  0;
}

は制約に違反しており、 の定義方法に応じて、 の宣言時またはの宣言時に診断が必要ip です。しかし、とにかくそのようなコードを書くことは避けるべきです。lpint32_t

于 2012-07-29T01:50:39.430 に答える