2

重複の可能性:
typedef宣言でtypedef-nameはオプションですか?

私はVisualStudio2008を使用していますが、これを見ました。

typedef enum testfoo
{
    enum1,
    enum2,
    enum3
};

通常、このようにtypedefを使用するCスタイルの方法では、追加のピース(名前)が1つ必要です。

typedef enum testfoo
{
    enum1,
    enum2,
    enum3
} testfoo_name;

前者の例は何をしていますか?不思議なことにコンパイルされますが、実際に何を定義しているのかわかりません。

4

2 に答える 2

0

違いがあります。2つ目はのエイリアスを作成しますenumが、1つ目は作成しません。最初の例のtypedefは、実際には何もしません。これにより、GCCで警告が表示されるので、削除できると思います。

Cではtypedef、構造体または列挙型の名前でインスタンス化されないように、構造体と列挙型を使用するのが一般的です。例えば:

struct A {};

struct A a;

これを短くするために、atypedefはトリックを行います:

typedef struct {} A;

これはC++ではもはや必要ないので、私はこの概念に対する彼の誤解の私の仮定を導き出します。あるいは、作者が名前を付けるのを忘れたのかもしれません...

クラスまたは構造体を使用する場合も同じことが起こります。

typedef struct A {}; // simply a class-declaration, generates a warning
于 2013-01-04T00:15:35.220 に答える
0

最初の例は役に立たないtypedefです。構文的には合法だと思いますが、型定義の名前が提供されていないため、次のようになります。

enum testfoo { enum1, enum2, enum3 );

Cでは、これによりenum testfoo;という名前の型が作成されます。typedefを使用して、型を単に。として参照できるようにするのが一般的です(必須ではありません)testfoo

C ++では、typedefがなくても、型はとして、enum testfooまたはとして参照できます。testfoo

誰かがルールについて混乱していて、型が(C ++で)として参照できることを確認しtestfoo、これが。のせいであると誤って想定したのではないかと思いtypedefます。

于 2013-01-04T00:19:01.430 に答える