私はしばらく C++ を学んでいますが、関数のプロトタイプと関数の呼び出しと関数の定義に関することしか頭に浮かびません。私はあらゆる種類のものを読んだことがありますが、それが何を意味するのか、何をするのかまだわかりません。それらのそれぞれを理解し、識別できるようになりたいだけです。私が読んだことから、これらはプログラミングにとって重要であると確信しています。私は関数プロトタイプの大まかな考えを持っています。それは何かの値を返すステートメントだと思います。
2 に答える
いくつかの類推で説明できるかどうか見てみましょう
Function Prototype - 製品の広告のようなものです - 製品 X があり、場所 Y から入手できると書かれています。消費者としてはこれで十分ですが、入手するために舞台裏で何が起こっているかについては何も述べていません。 XからYへ、そしてあなたへ。
同様に、関数プロトタイプは、X という名前の関数が存在し、引数 Y を受け取り、値 Z を返すことを示すステートメントです。任意の呼び出し元にとっては十分ですが、それ自体では何もできません。
例えばint DoSomething(int arg);
関数呼び出し- これは消費者が場所 Y に行き、製品 X を求めていることです。
これは、関数コードが実際に呼び出されるときです。ただし、関数を呼び出すには、関数の存在を知る必要があるため、(少なくとも) 呼び出しのすぐ上に関数のプロトタイプが必要です。
例えばint a = DoSomething(1);
機能定義- これは、製品 X を製造し、場所 Y に輸送する実際の手順です。
基本的に、これは関数自体のコードです。
例えば
int DoSomething(int arg){
return arg+2;
}
C では関数プロトタイプ (前方宣言とも呼ばれる) が必要であり、C++ ではフリー関数 (クラスに属さない関数) が必要です。
関数プロトタイプは C に固有のもので、C++ では使用されません。AC 関数プロトタイプは、次のような C++ 関数宣言とほとんど同じです。
int f(int);
int g(double);
それらが異なるのは、括弧内に何も入れていない場合です。
int f();
C++ では、これf
は引数を取る関数として宣言します。Cでは、引数について何も指定せずf
に関数として宣言します1。C 宣言と同等の C プロトタイプを取得するには、括弧の間に何かを入れる必要があります。
int f(void);
後者は C++ でも許可されていますが、ほとんどのC++ プログラマーはそれを避けることを好みます。
関数定義は、関数のヘッダーと本体を持つ場所です。
int f(int x) {
return x+4;
}
関数呼び出しは、定義した関数を使用する場所です。
int y = 2;
int x = f(y); // using the f() above, this is equivalent to int x = 6;
1昔 (1985 年くらい前) には、C には関数プロトタイプがまったくなかったため、サポートされていた関数宣言の種類はこれだけでした。通常、新しいコードでは眉をひそめます。