いちばん失敗した人決定戦

Cの構造体の定義で、

typedef struct Eyesight {
int no;
float right;
float left;
} Eyesight;

と書いた場合、
Eyesightがstruct Eyesightに変換されると思うのですが、
タグ名無しで、

typedef struct {
int no;
float right;
float left;
} Eyesight;

と書いた場合、
Eyesightは、struct { int no; float right; float left; }
に変換されると思って良いのでしょうか?

質問者からの補足コメント

  • どういう理屈でそうなるんですか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/02/06 04:48
  • case 2:は、Sにaとbが入って、

    struct { int hoge; } a;
    struct { int hoge; } b;

    となって、case 4:と同じになると思うのですが、何が違うのですか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/02/06 19:22
  • typedef struct Eyesight {
     ~
    } Eyesight; (1)
    Eyesight es; (2)
    と書いた場合、
    (1)の後ろのEyesightが(2)のesに置き換わって、typedefが取り去られて、
    struct Eyesight {
     ~
    } es;
    という定義と同じ。

    typedef struct {
     ~
    } Eyesight; (3)
    Eyesight es; (4)
    と書いた場合、
    (3)のEyesightが(4)のesに置き換わって、typedefが取り去られて、
    struct {
     ~
    } es;
    という定義と同じ。
    という理解で良いですか?

    No.4の回答に寄せられた補足コメントです。 補足日時:2021/02/06 20:12

A 回答 (7件)

#3 の case 1~case 4 の違いは理解できたのですか?



自分勝手な, 間違った認識に固執するのは有害なだけですよ.
    • good
    • 0

> という理解で良いですか?



置き換わるわけじゃないというのは回答に書いたとおりです。

「typedefを使わないで書き直すとどうなるか?」
ということであれば、補足にお書きの通りです。
    • good
    • 0

規格上


構造体の宣言で「メンバーリスト」があると*新しい型*の宣言になる
というきまりになっている. そして #3 の case 1~case 4 をきちんと見ることができるなら
case 4 のみ 2つの型を宣言している
ことが認識できるはず.

実際, case 4 だけ a と b の型が違うので
b=a;
という代入ができない.
    • good
    • 0

マクロじゃ無いので、変換されるわけじゃいです。



新たなる型の定義なので。

まあ、「変換される」という単語に込めた意味によっては、おかきの通りで正しいと言えるかも知れません。
この回答への補足あり
    • good
    • 0

おっと, case が適切な比較になってなかった.



case 1:
typedef struct { int hoge; } S;
S a, b;

case 2:
typedef struct { int hoge; } S;
S a;
S b;

case 3:
struct { int hoge; } a, b;

case 4:
struct { int hoge; } a;
struct { int hoge; } b;

だと case 1~case 3 では「a と b は同じ型の変数」だが case 4 だけは「a と b は違う型の変数」となる.
この回答への補足あり
    • good
    • 0

「変換される」をどういう意味で使っているのかがわからんのだけど



case 1:
typedef struct { int hoge; } S;
S a, b;

case 2:
struct { int hoge; } a;
struct { int hoge; } b;

の 2つは意味が違う. case 1 の a と b は同じ型だが case 2 の a と b は違う型.
    • good
    • 0

どちらの書き方でも同じで、struct Eyesightになります。

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!