2

現在、私はiOSアプリケーションに取り組んでおり、データを保存するために構造を使用しています。

次のような構造を宣言しました。

typedef struct Message
{
    int    messageType;
    char   *data;
    int    length;
} Message;

しかし、変数を宣言する必要があるとき、誤って次のように書きました。

struct Message *myMessage = NULL;

これは問題なく動作しています。

私の質問は、なぜこの行に問題が表示されないのですか?

両方 :

struct Message *myMessage = NULL;

Message *myMessage = NULL;

正しく動作しています。これは の正しい動作typedefですか? を使用したときにエラーが表示されないのはなぜstruct Messageですか?

4

5 に答える 5

8

はい、正しいです。

「構造体タグ」と呼ばれるキーワードに続く名前は、エイリアス名structと同じ「名前空間」にありません。typedefそのため、衝突して何らかのエラーを生成していません。

つまり、宣言からタグを削除して、次のようにする必要があります。

typedef struct
{
    int    messageType;
    char   *data;
    int    length;
} Message;

必要のない名前を導入しても意味がありません。これは、前に書く名前がないため、この種の混乱からあなたを守ることにもなりますstruct.

于 2013-06-11T11:14:13.933 に答える
4

はい、これは想定内です。 struct Messageは型であり、typedef はMessageそのエイリアスとして作成されています。変数を宣言するときは、どちらも使用できます。

于 2013-06-11T11:13:55.820 に答える
2

これは の正しい動作ですtypedef

于 2013-06-11T11:15:39.270 に答える
2

上記は両方struct Messageとその「エイリアス」を として宣言していMessageます。どちらも問題ありません。

于 2013-06-11T11:14:16.213 に答える