2011-02-01 16 views
3

標準(最新バージョン:WG14/N1256)と言う(6.2.1§2):C標準 - 関数定義は関数プロトタイプですか?

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

他のすべての識別子は、スコープの配置によって決定した:このステートメントの近傍に

、我々はまた、識別子宣言が宣言または型指定子(§4)から成るという証拠を見つけます。その宣言(宣言子または型指定子の 内)。

したがって、関数定義が関数プロトタイプであるかどうかは、関数定義が宣言子であるかどうかを知ることになると思われます。それは...ですか ?

C標準に準拠した実証済みの回答が必要です。私はいつもの意味、あるいはウィキペディアやあなたの好きなCの本が言っていることを本当に気にしません。ここで

は、その関数の定義が実際に関数プロトタイプ(§4)ことができると思うし、私を導いた、標準で文です:

識別子を宣言宣言子または型指定子がリストの中に表示された場合パラメータの関数プロトタイプ(機能 デFiをnitionの一部ではない)での宣言、...

+0

「パラメータの型を宣言する」とは、関数プロトタイプを古いスタイルのK&R関数と区別することです。 'int foo(x、y)'と 'int foo(int x、int y)'です。 –

答えて

6

はい、関数定義についての6.9.1を参照して、第7項:

宣言子にパラメータリスト が含まれている場合、リストにはすべてのパラメータのタイプも と指定されています。そのような 宣言子は、後で同じ翻訳単位内の同じ 関数への呼び出しのための関数 プロトタイプとしても機能します。