11

§6.2.7.5 (66 ページ)から:

例 次の 2 つのファイル スコープ宣言があるとします。

int f(int (*)(), double (*)[3]);  
int f(int (*)(char *), double (*)[]);  

関数の結果の複合型は次のとおりです。

int f(int (*)(char *), double (*)[3]);

上記の例では、複合型は 2 つの異なる型と互換性のある型であると説明しています。「複合型」という言葉は、「構造と結合」を意味するものとして直感的に理解できますが、これは的を外しているように見えます。

Cの複合型とは何ですか? また、それは何に使用されますか? 誰かが上記の例を詳しく説明してくれませんか?

4

2 に答える 2

5

「複合型」という言葉は、「構造と結合」を意味するものとして直感的に理解できますが、これは的を外しているように見えます。

C 言語の定義では、配列と構造体は集合型 (複数の要素から構成される型) です。ユニオンは、一度に 1 つの要素の値しか取得できないため、独自の動物のようなものです。

複合型は、ありふれたコード モンキーではなく、コンパイラの実装者にとってより重要な問題です。あなたも私も、複合型を定義したり、その型のオブジェクトを宣言したりしようとはしません。

f上記の例では、互いにわずかに異なる関数の 2 つのファイル スコープ宣言があります。6.2.7/3 で提示された規則に基づいて、コンパイラは、コンパイル時に型セマンティクスを適用できるように、両方で機能する型を決定します (つまり、fわずかに異なる宣言であっても、 への呼び出しを適切にチェックできます)。関数を呼び出すための適切なマシン コードを生成します。

于 2013-05-07T16:30:21.150 に答える