C++の基礎:関数の宣言と定義について学ぶ

提供: Support
移動先: 案内検索

概要

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++]