8
6.7.6.3 Function declarators (including prototypes)

標準のこの部分では、'Identifier list'と を扱い'Parameter type list'ます。

まず、関数の宣言 (定義ではない) は関数のプロトタイプと同じです。私は正しいですか?これが正しければ、なぜ規格はこう言っているの'including prototypes'でしょうか?

関数宣言に関して'Identifier list'との違いがわかりません。'Parameter type list'

int fun();    // Declaration
int fun(int x)// Definition, but the signature doesn't match and it works.
{ return x; }

誰かが説明できますか、私は混乱していますか?

4

3 に答える 3

2

C11標準で

6.7.6.3 関数宣言子 (プロトタイプを含む)
制約

D( parameter-type-list )
or
D( identifier-listopt )  

関数を宣言する際に、識別子のリストを指定する必要はありません。しかし、少なくともタイプリストについて言及する必要があります

例:

int sum(int,int); //declaration  

int sum(int a,int b); //declaration

どちらも同じ関数の宣言です。

2つ目は、オプションの識別子についても言及しました。

于 2013-09-16T05:22:13.300 に答える
1

C11(ISO/IEC 9899:201x) §6.2.1識別子の範囲セクション 2

関数プロトタイプは、パラメーターの型を宣言する関数の宣言です。

あなたの例のように、関数定義について

int fun(int x)
{ return x; }

int func(int x);とはどちらint func();も有効な関数宣言です。しかし、前者だけが関数プロトタイプです。

関数宣言では、変数名を省略することもできますint func(int);。可読性に欠けるため、通常はそうしたくないのですが。

于 2013-09-16T05:26:54.570 に答える