info.h に以下のような構造体があるとします。
typedef struct _INFO {
int a;
double b;
} INFO
main.hに
INFO info;
と記述がある場合、これは何という名称の記述方法でしょうか。
info.aなどと頻繁に使うので使い方は分かるのですが、
気になるので詳しく調べようとすると何とググって調べるのか分かりません。
あくまでデタラメですが例えばこれは「構造体置換」という文法ですよ、とか・・・
この文法は何と呼びますか?
Re: この文法は何と呼びますか?
このような質問ははじめてみました。ぽんた さんが書きました:INFO info;
と記述がある場合、これは何という名称の記述方法でしょうか。
強いていうなら「(変数の)宣言」でしょう。
もう少し具体的に、「(変数の)定義」ということもできます。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: この文法は何と呼びますか?
超能力を発揮させてtypedefの機能の質問でしょうか?
INFOはtypedefで付けたstruct _INFOの別名というか新しい型の名前です。
なので、INFO info;とstruct _INFO info;は同義ということになります。
INFOはtypedefで付けたstruct _INFOの別名というか新しい型の名前です。
なので、INFO info;とstruct _INFO info;は同義ということになります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
ぽんた
Re: この文法は何と呼びますか?
たかぎさん、softyaさんありがとうございます。
変な質問ですみません。
変数の宣言は(データ型) (変数名);というように
メモリ空間の確保を目的としているものとずっと思っていました。
INFO と infoが単なる”言い換え”定義だとすれば、
#define INFO info
と別の記法が許されている点が不思議です。
INFO info;のような単純な宣言がそんな自由に使えていいのか?
typedefに対する再定義に限定される記法なのか、
あるいはもっと使いでのある記法なのか?
そこらへんを知るべく、正式な文法名が分かれば
いいなぁと思うのです。
変な質問ですみません。
変数の宣言は(データ型) (変数名);というように
メモリ空間の確保を目的としているものとずっと思っていました。
INFO と infoが単なる”言い換え”定義だとすれば、
#define INFO info
と別の記法が許されている点が不思議です。
INFO info;のような単純な宣言がそんな自由に使えていいのか?
typedefに対する再定義に限定される記法なのか、
あるいはもっと使いでのある記法なのか?
そこらへんを知るべく、正式な文法名が分かれば
いいなぁと思うのです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: この文法は何と呼びますか?
勘違いされていると思いますが、
typedef struct _INFO {
int a;
double b;
} INFO;
は変数の実体を持ちません。型と名前を宣言しているだけです。
INFO info;
で始めてメモリが割り当てられて変数が宣言されます。
INFOが型名でinfoが変数名です。
int a;
がint が型名でaが変数名なのと同様ですね。
typedef struct _INFO {
int a;
double b;
} INFO;
は変数の実体を持ちません。型と名前を宣言しているだけです。
INFO info;
で始めてメモリが割り当てられて変数が宣言されます。
INFOが型名でinfoが変数名です。
int a;
がint が型名でaが変数名なのと同様ですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: この文法は何と呼びますか?
言い換えではありません。ソフトやさんも指摘していますが。ぽんた さんが書きました:たかぎさん、softyaさんありがとうございます。
変な質問ですみません。
変数の宣言は(データ型) (変数名);というように
メモリ空間の確保を目的としているものとずっと思っていました。
INFO と infoが単なる”言い換え”定義だとすれば、
#define INFO info
と別の記法が許されている点が不思議です。
そもそもtypedefとは、同義語を作るためのものです。その時点で造られるのは、この場合「int型aとdouble型bを持つ構造体の名前」です。実際にそれを確保、実体化しようと思ったら
INFO info;//INFO型の構造体infoを実体化
を書くわけです。
#define INFO info
こちらは全く意味が違います。これは「コンパイル段階で、INFOを全てinfoに置き換える」という意味です。
✜ で C ご ✜
: す + 注 :
¦ か + 文 ¦
: ? Is the は :
✜ order C++? ✜
: す + 注 :
¦ か + 文 ¦
: ? Is the は :
✜ order C++? ✜
糸冬
――――――――
制作・著作 NHK
――――――――
制作・著作 NHK
-
ぽんた
Re: この文法は何と呼びますか?
みなさん、色々なご意見ありがとうございます。
>INFOが型名でinfoが変数名です。
この一文にて、メモリ確保がこの行で実行される
ということが分かりましたので、首題の疑問は解決いたしました。
恥ずかしながら、「宣言=メモリ確保」という思い込みがありました。
いつもながら大変参考になりました。
>INFOが型名でinfoが変数名です。
この一文にて、メモリ確保がこの行で実行される
ということが分かりましたので、首題の疑問は解決いたしました。
恥ずかしながら、「宣言=メモリ確保」という思い込みがありました。
いつもながら大変参考になりました。