2012-03-02 20 views
2

私の質問は簡単です。 C++ではtypedefを次のような宣言で延期するのは合法でしょうか? gccは問題なくコードを受け取りますが、これは推奨されていませんか?私は命令の冒頭でtypedefを使ってサンプルを見つけるたびにこれを尋ねます。C++のTypedef enum宣言

enum _mytype { 
A=1, 
B=2 
} typedef mytype; 
+0

文法ごとに 'typedef'は' decl'ion-seq-> decl'ion-> block-decl'ion-> simple-decl'ion-> decl-spec-seq-です。 > decl-spec')、しかし私はセマンティクスが明確に定義されているかどうかはわかりません。 –

+1

この種のtypedef規約はC++で廃止されています。 typedef st_foo {...} fooのような何かをする誘惑はもはやありません。 C++では短絡型ではないので、「struct foo」なしで 'foo'を書くことができます。同様にtypedefのようなものは必要ありませんen_foo {...} foo;同じ理由で。実際には、BUFB aka Expert C Programmingによるtypedefで 'struct'または 'enum'を隠すための推奨されたC規約でもありません。 – stinky472

+1

そしてアンダースコアで始まる識別子を使うのは良い考えではありません。 –

答えて

4

typedef X Y;

X typedef Y;

C++でまったく同じことを書くためだけの2つの方法があります。どちらも非難されていません。最初の方がずっと一般的に使われています。おそらく、 "typedef X as Y"と読むことができるからです。

+1

+1。私はかつて私の同僚が自分のコードに1-spaceインデントを使用する厄介な習慣を持っていた私の同僚を苛立たせるために後者のスタイルをしました。 – stinky472

+0

私はこれを知らなかった。 –

+1

@ stinky472:どちらもタブのインデントを使用する必要があります。スペースインデントは厄介な習慣です。 –

-2

Cでは、しばしばタイプ "列挙型what_ever" ではなく "what_ever" を定義するC "what_ever列挙型" に

typedef enum 
{ 
} what_ever; 

を使用しています。しかし、C++ではそうではなく、下位互換性のために、C++を書くときにこのような状況でtypedefを使うべきではありません。

+0

私はあなたがもう一度質問を読むべきだと思います。私はあなたがそれに全く答えなかったと思います。 –