1

ウィキペディアでTypedefについて読んでいます。そのページに記載されている例は

typedef int km_per_hour ;
typedef int points ;

km_per_hour current_speed ;
points high_score ;
...

void congratulate(points your_score) {
if (your_score > high_score)
...

さらに進んで、それは私がなぜ理解できないこれを言いますか?

void foo() {
unsigned int a;         // Okay
unsigned km_per_hour b; // Compiler complains
long int c;             // Okay
long km_per_hour d;     // Compiler complains
...

コンパイラがunsignedとlongについて文句を言うのはなぜですか?

4

4 に答える 4

3

'dタイプの前signedまたはunsigned前に追加することはできません。基本的 な整数型のみを変更し、それを直接行うことができます。typedefsignedunsigned

コンパイラーは、単独で、または、、、およびの近くsignedで解析します。他のすべての場合、それらは無効/予期しない/置き忘れと見なされます。unsignedcharshortintlong

その意味で、修飾子としては機能signedunsignedません。constvolatile

于 2012-09-22T06:36:59.830 に答える
1

typedefsのように変更または使用することはできませんmacros。あなたはとして持っkm_per_hourているintので、それはそれだけで使うことができます!

typedefsコンパイラの問題を取り除くには、の定義を変更するか、新しい定義を定義する必要があります。

于 2012-09-22T06:39:09.753 に答える
0

追加の指定子を使用してtypedefを変更することはできません。km_per_hourbのみを書き込む必要があります。およびkm_per_hourd; これがお役に立てば幸いです。

于 2012-09-22T06:36:11.227 に答える
0

タイプを定義したので-つまり、剣を地面に置いてケースを作りました。

その後、ケースを変更することはできません。これは、法廷でもコンパイラでも機能しません。

比喩でごめんなさい。

于 2012-09-22T06:37:33.540 に答える