![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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; }
に変換されると思って良いのでしょうか?
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
> という理解で良いですか?
置き換わるわけじゃないというのは回答に書いたとおりです。
「typedefを使わないで書き直すとどうなるか?」
ということであれば、補足にお書きの通りです。
No.5
- 回答日時:
規格上
構造体の宣言で「メンバーリスト」があると*新しい型*の宣言になる
というきまりになっている. そして #3 の case 1~case 4 をきちんと見ることができるなら
case 4 のみ 2つの型を宣言している
ことが認識できるはず.
実際, case 4 だけ a と b の型が違うので
b=a;
という代入ができない.
No.3
- 回答日時:
おっと, 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 は違う型の変数」となる.
No.2
- 回答日時:
「変換される」をどういう意味で使っているのかがわからんのだけど
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 は違う型.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- C言語・C++・C# C++ と、 1 2022/11/07 23:45
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- その他(プログラミング・Web制作) VS CodeでTEXファイルにPDF形式の図を挿入する方法 2 2023/01/19 11:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
typedef enumの使い方を教えて...
-
2重定義って??
-
visualstudio C# テキストボッ...
-
VC6でlong longでエラー?
-
int void (main)の意味・・・
-
intとINTの違いは?
-
C++ クラスをメンバにもつクラ...
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
引数で argc argvが使用され...
-
C++でboolにintの値を代入する...
-
ハンドルされていない例外が発...
-
直接アドレス指定のポインタの...
-
inline
-
C言語での方向キー入力判定
-
void func( void )について
-
【#define】 defineで定義した...
-
C言語の<ctype.h>のisspace()に...
-
C言語のコンパイルエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
visualstudio C# テキストボッ...
-
C++のfor文について
-
構造体の要素すべてに対する四...
-
typedef enumの使い方を教えて...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
関数の実体定義にヘッダファイ...
-
intとINTの違いは?
-
【#define】 defineで定義した...
-
C++でboolにintの値を代入する...
-
構造体の宣言でエラーが出ます。
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
void func( void )について
-
エラー「invalid conversion fr...
-
C言語 宣言した変数になにも代...
-
0除算を判定したい
おすすめ情報
どういう理屈でそうなるんですか?
case 2:は、Sにaとbが入って、
struct { int hoge; } a;
struct { int hoge; } b;
となって、case 4:と同じになると思うのですが、何が違うのですか?
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;
という定義と同じ。
という理解で良いですか?