2016-04-08 15 views
-3

を理解しようと、私はK & Rを経由していると私は、関数の章にだ、と私は簡単な質問があります。は、関数のプロトタイプに

は、私はいつものプロトタイプとしての機能を宣言する必要がありますか?どのような議論がプロトタイプになるのかそれは関数定義の2つの変数に過ぎないのでしょうか?

ありがとうございます!

+0

_あなたの要件に基づいて、どのような引数関数に必要なのかを決定します。あなたの仕事が機能するために2つの引数で行われている場合は、2つを渡します。引数の数はあらかじめ定義されていません(_built-in関数は例外です)。 – ameyCU

+2

プロトタイプは関数定義と全く同じで、その後に ';'をつけるべきです。 Cの古いバージョンではこれを行うための他の方法も許されていましたが、これらは混乱の原因となります。関数定義(実行体)が実際に呼び出される前にモジュール内に現れた場合、コンパイラはすでにそれを知っているので、プロトタイプは必要ありません。 –

+0

いいえ、プロトタイプを常に宣言する必要はありません。いくつかの関数を記述すると、プロトタイプを書くことでトラックを維持するのに役立ちます。関数が必要で、プロトタイプをタイプしただけで、後でその関数を完了する必要があるとします。そうでなければ、上記の@Weather Vaneのような関数を書くことができます。 – cjahangir

答えて

1

を宣言し、プロトタイプ構文を使用して関数を定義する必要があります。そうすることで、コンパイラは関数呼び出しで間違った数または型の引数を渡すときにエラーをキャッチできます。 Cはプロトタイプの構文を使用しない宣言と定義を引き続きサポートしていますが、これは古代のコードベースをサポートするためのものです。古い構文を使用して新しいコードを書くべきではありません。

プロトタイプに入る引数は、関数が何をする必要があるかによってまったく異なります。数学ライブラリのpow()関数の代わりを書いているとします。

double myPow(double base, int exp); // declaration, prototype syntax 
... 
double myPow(double base, int exp) // definition, prototype syntax 
{ 
    ... 
} 

あなたは宣言の中でパラメータ名を省略することができます:私は1つが、ベースと、次回の指数であること、2つの引数を必要とする

double myPow(double, int); 

大事なことで、その数と種類引数が指定されています。古いスタイルの宣言と定義

は次のようになります。

double myPow(); // declaration, old syntax 
... 
double myPow(base, exp) // definition, old syntax 
    double base; 
    int exp; 
{ 
    ... 
} 

あなたが定義している関数の引数を選択しない唯一の時間はmain機能です。 mainの実装を定義することができますが、どの引数を取るか決めることはできません。タイプintchar **

int main(void) 

または二つの引数:

int main(int argc, char **argv) 

そのようないくつかのUnixに見出さ第char **envp引数として(mainための追加のプロトタイプを提供してもよい実装mainのいずれかは、引数を取りません実装に限定されていますが、これは実装に限定されています)mainの任意のインタフェースを作成することはできません。