C リファレンス マニュアル、特に付録 A を読んでいるときに、次のステートメントを見つけました。
D の形式が ( D1 ) である宣言 TD では、D1 の識別子の型は D の型と同じです。括弧は型を変更しませんが、複雑な宣言子のバインディングを変更する場合があります。
宣言子はどのように ( D1 ) の形式を取ることができ、ここで参照されているバインディングの違いは何ですか。
例:int a
適切な宣言ですが、どういうint (a)
意味ですか?
C リファレンス マニュアル、特に付録 A を読んでいるときに、次のステートメントを見つけました。
D の形式が ( D1 ) である宣言 TD では、D1 の識別子の型は D の型と同じです。括弧は型を変更しませんが、複雑な宣言子のバインディングを変更する場合があります。
宣言子はどのように ( D1 ) の形式を取ることができ、ここで参照されているバインディングの違いは何ですか。
例:int a
適切な宣言ですが、どういうint (a)
意味ですか?
int (a)
とまったく同じ意味int a
です。これは「複雑な宣言子」ではありません。
違いが生じる例は、関数ポインターを宣言する場合です。
int (*f)(float);
これは、"を受け取り、"を返すf
関数へのポインタであることを意味します。括弧がないと、次のようになります。float
int
int *f(float);
これは、「は(を指すポインター) を受け取り、返すf
関数である」ことを意味します。確かにかなり違うもの。float
int*
int
ウェブサイトcdecl.org (またはコマンド ライン ツールcdecl
) を試して、これらについて説明してください。
cdecl> explain int (*f)(float);
declare f as pointer to function (float) returning int
cdecl> explain int *f(float);
declare f as function (float) returning pointer to int