C++の基礎:関数の宣言と定義について学ぶ
概要
C/C++のプログラミング言語では、関数には「宣言」と「定義」の2つのパートがあります。
関数の宣言は、関数の戻り値の型、関数名、()括弧内のパラメータの組み合わせです。
関数の定義は、関数の本体で、ステートメントや他の関数を含みます。
一般的には、以下のように定義されています。
myfunction() // this is the function declaration
{
// the definition of the function (statements and other functions)
}
例えば、アプリケーションの情報を表示するinfo()関数は、以下のコード例のように宣言・定義できます。
info()
{
std::cout << "This is my application.\n";
std::cout << "Here is my information.\n";
std::cout << "Developed in 2021 by My Company\n";
std::cout << '\n';
}
場合によっては、呼び出し後に関数を宣言および定義します。 たとえば、この例では、main()関数の後に関数を宣言して定義すると、エラーが発生します。 行ごとの進行状況では、info()関数を呼び出すときに情報がないためです。 その場合、関数を呼び出す前に関数を宣言する必要があります。 そのためには、関数の宣言部分だけが必要です。完全な宣言と定義の部分は、メイン関数の後に残しておく必要があります。以下のコード例をご覧ください。
#include <iostream>
info(); // decleration
int main()
{
info(); // calling info function
}
info()
{
std::cout << "This is my application.\n";
std::cout << "Here is my information.\n";
std::cout << "Developed in 2021 by My Company\n";
std::cout << '\n';
}
このinfo()関数は戻り値を持たないことに注意してください。関数に戻り値があり、パラメータがある場合は、宣言と同じものを使用する必要があります。
関数の宣言とヘッダやC++ファイル内の定義
多くの関数をヘッダーや.c、.cppファイルに追加することができます。以下のコードはヘッダに関数の宣言と定義がある場合の例です。
myinfo.h
info()
{
std::cout << "This is my application.\n";
std::cout << "Here is my information.\n";
std::cout << "Developed in 2021 by My Company\n";
std::cout << '\n';
}
これはmain.cppで、上記の例と同じように動作します。
#include <iostream>
#include <myinfo.h>
int main()
{
info(); // calling info function
}
ご覧のとおり、 .h ファイルで関数を宣言および定義し、このヘッダーをメイン関数にインクルードします。この例では、同じ関数の再定義が許可されておらず、異なるモジュール(フォームやユニット)にこのヘッダを含めることはできないため、コンパイラが競合してエラーが発生します。
一般的には、関数の宣言にはヘッダを使用し、関数の宣言と定義はC++ファイルにコーディングします。これにより、ユーザーは関数宣言と同じヘッダーを追加することができます。ここでは、.h .cpp と main.cpp ファイルを使った良い例を示します。
myinfo.h
info();
myinfo.cpp
info()
{
std::cout << "This is my application.\n";
std::cout << "Here is my information.\n";
std::cout << "Developed in 2021 by My Company\n";
std::cout << '\n';
}
main.cpp
#include <iostream>
#include <myinfo.h>
int main()
{
info(); // calling info function
}
クラス内での関数宣言
C++はオブジェクト指向のプログラミング言語で、オブジェクトはクラスで定義され、ほとんどの関数はこれらのクラスで定義されます。関数は、以下のコード例のようにクラスのpublic:またはprivate:セクションで定義することもできます。
myinfo.h
class myclass
{
public:
info();
}
クラス外の関数宣言では、クラス内で ::文字を使って宣言する必要があります。
myinfo.cpp
myclass::info()
{
std::cout << "This is my application.\n";
std::cout << "Here is my information.\n";
std::cout << "Developed in 2021 by My Company\n";
std::cout << '\n';
}
外部の関数宣言
場合によっては、モジュールやライブラリ間で関数を使用することができます。これらの宣言された関数を使用するには、以下のコード例のように externコマンドを使用して、コード内で外部に宣言します。
#include <iostream>
#include <myinfo.h>
extern info();
int main()
{
info(); // calling info function
}
関連情報
[Learn About Function Declaration and Definition in C++]