Namespaces
Variants

Functions

From cppreference.net

関数は、C言語の構文要素であり、 複合文 (関数本体)を 識別子 (関数名)に関連付けます。すべてのCプログラムは、 main関数 から実行を開始し、プログラムは終了するか、他のユーザー定義またはライブラリ関数を呼び出します。

// 関数定義
// 名前「sum」と本体「{ return x+y; }」を持つ関数を定義する
int sum(int x, int y) 
{
    return x + y;
}

関数は function declaration または function definition によって導入されます。

関数はゼロ個以上の parameters を受け入れることができ、これらは function call operator arguments から初期化されます。また、 return statement を通じて呼び出し元に値を返すことができます。

int n = sum(1, 2); // パラメータxとyは引数1と2で初期化される

関数の本体は 関数定義 で提供されます。各式で使用される各 inline でない (C99以降) 関数( 未評価式 を除く)は、プログラム内で 一度だけ定義 されなければなりません。

ネストされた関数は存在しません(非標準のコンパイラ拡張によって許可されている場合を除く):各関数定義はファイルスコープで記述されなければならず、関数は呼び出し元のローカル変数にアクセスできません:

int main(void) // main関数の定義
{
    int sum(int, int); // 関数宣言(任意のスコープで記述可能)
    int x = 1;  // main内のローカル変数
    sum(1, 2); // 関数呼び出し
//    int sum(int a, int b) // エラー:ネスト関数は不可
//    {
//        return  a + b; 
//    }
}
int sum(int a, int b) // 関数定義
{
//    return x + a + b; // エラー:main内のxはsumからアクセス不可
    return a + b;
}

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 6.7.7.4 関数宣言子(プロトタイプを含む)(p: TBD)
  • 6.9.2 関数定義 (p: TBD)
  • C17 standard (ISO/IEC 9899:2018):
  • 6.7.6.3 Function declarators (including prototypes) (p: 96-98)
  • 6.9.1 Function definitions (p: 113-115)
  • C11 standard (ISO/IEC 9899:2011):
  • 6.7.6.3 Function declarators (including prototypes) (p: 133-136)
  • 6.9.1 Function definitions (p: 156-158)
  • C99規格 (ISO/IEC 9899:1999):
  • 6.7.5.3 関数宣言子(プロトタイプを含む)(p: 118-121)
  • 6.9.1 関数定義(p: 141-143)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 3.5.4.3 関数宣言子(プロトタイプを含む)
  • 3.7.1 関数定義

関連項目

C++ documentation for 関数の宣言