logo

C関数

C の関数 呼び出されたときに特定のタスクを実行する一連のステートメントです。これは、モジュール性とコードの再利用性を提供する C プログラムの基本的な構成要素です。関数のプログラミング ステートメントは次のように囲まれています。 { } ブレース 、特定の意味を持ち、特定の操作を実行します。他の言語ではサブルーチンまたはプロシージャとも呼ばれます。

この記事では、関数、関数定義について学びます。宣言、引数とパラメータ、戻り値など。



C の関数の構文

関数の構文は 3 つの側面に分類できます。

    関数宣言 関数定義 関数呼び出し

関数の宣言

関数宣言では、関数名、その戻り値の型、およびそのパラメーターの数と型を指定する必要があります。関数宣言は、指定された名前の関数がプログラム内の別の場所に定義されているということをコンパイラーに伝えます。

構文

return_type name_of_the_function  ( parameter_1 , parameter_2 );>

関数を宣言する場合、パラメーター名は必須ではありません。データ変数の名前を使用せずに関数を宣言することもできます。



int sum (int a , int b ); int sum (int , int);>
関数の宣言

関数の宣言

注記: C の関数は、呼び出す前に必ずグローバルに宣言する必要があります。

関数の定義

関数定義は、関数が呼び出されたとき (つまり、プログラム制御が関数に到達したとき) に実行される実際のステートメントで構成されます。



C 関数は通常、1 つのステップで定義および宣言されます。関数定義は常に関数宣言で始まるため、明示的に宣言する必要はありません。以下の例は、関数定義と宣言の両方として機能します。

return_type function_name (para1_type  para1_name,  para2_type  para2_name ) { // body of the function }>
C での関数定義

C での関数定義

関数呼び出し

関数呼び出しは、コンパイラに関数の実行を指示するステートメントです。関数呼び出しでは関数名とパラメータを使用します。

以下の例では、最初の sum 関数が呼び出され、10,30 が sum 関数に渡されます。関数呼び出し後、a と b の合計が返され、制御もプログラムの main 関数に戻ります。

Cでの関数の働き

Cでの関数の働き

注記: 関数呼び出しは、プログラム制御を関数定義に持ち込むために必要です。呼び出されない場合、関数ステートメントは実行されません。

C関数の例

C




// C program to show function> // call and definition> #include> // Function that takes two parameters> // a and b as inputs and returns> // their sum> int> sum(>int> a,>int> b)> {> >return> a + b;> }> // Driver code> int> main()> {> >// Calling sum function and> >// storing its value in add variable> >int> add = sum(10, 30);> > >printf>(>'Sum is: %d'>, add);> >return> 0;> }>

>

ハドゥープのチュートリアル
>

出力

Sum is: 40>

お気づきのとおり、明示的な関数宣言は使用していません。関数を定義して呼び出しただけです。

関数の戻り値の型

関数の戻り値の型は、すべての関数が実行された後に返される値の型を示します。値を返したくない場合は、void データ型を使用できます。

例:

int func(parameter_1,parameter_2);>

上記の関数は、関数内でステートメントを実行した後、整数値を返します。

注記: C 関数から返せる値は 1 つだけです。複数の値を返すには、ポインターまたは構造体を使用する必要があります。

関数の引数

関数の引数 (関数パラメーターとも呼ばれます) は、関数に渡されるデータです。

例:

int function_name(int var1, int var2);>

戻り値の型と引数の条件

C プログラミング言語では、関数は引数の有無にかかわらず呼び出すことができ、値を返す場合もあります。呼び出し元の関数に値を返す場合もあれば、返さない場合もあります。

  1. 引数も戻り値も持たない関数
  2. 引数なしで戻り値のある関数
  3. 引数あり、戻り値のない関数
  4. 引数と戻り値を持つ関数

関数の引数と戻り値の詳細については、「C の関数の引数と戻り値」の記事を参照してください。

C関数はどのように動作するのでしょうか?

C 関数の動作は、以下で説明するように次のステップに分けることができます。

    関数の宣言: 関数の宣言は、関数を宣言するステップです。ここでは、関数の戻り値の型とパラメーターを定義します。
  1. 関数の定義:
  2. 関数の呼び出し: 関数の呼び出しは、関数に引数を渡して関数を呼び出すステップです。関数の実行: 関数の実行は、関数内のすべてのステートメントを実行して最終結果を取得するステップです。値を返す: 値を返すとは、関数の実行後に計算された値が返されるステップです。関数の終了は、メイン関数に完全な制御を与える前に、変数、関数などに割り当てられたすべてのメモリが破棄される最後のステップです。

関数の種類

C には 2 種類の関数があります。

    ライブラリ関数 ユーザー定義関数
関数の種類

C の関数の種類

1. ライブラリ機能

ライブラリ関数は、 組み込み関数 。これらの関数を含むコンパイラ パッケージはすでに存在しており、それぞれが特定の意味を持ち、パッケージに含まれています。組み込み関数は定義せずに直接使用できるという利点がありますが、ユーザー定義関数は使用する前に宣言して定義する必要があります。

例えば:

pow(), sqrt(), strcmp(), strcpy() etc.>

Cライブラリ関数の利点

  • C ライブラリ関数は使いやすく、パフォーマンスが向上するように最適化されています。
  • C ライブラリ関数は、関数開発時間を大幅に節約します。
  • C ライブラリ関数は常に動作するため便利です。

例:

C




// C program to implement> // the above approach> #include> #include> // Driver code> int> main()> {> >double> Number;> >Number = 49;> >// Computing the square root with> >// the help of predefined C> >// library function> >double> squareRoot =>sqrt>(Number);> > >printf>(>'The Square root of %.2lf = %.2lf'>,> >Number, squareRoot);> >return> 0;> }>

>

>

出力

The Square root of 49.00 = 7.00>

2. ユーザー定義関数

プログラマが作成する関数は、ユーザー定義関数またはユーザー定義関数と呼ばれます。 カスタマイズされた機能 。ユーザー定義関数は、プログラマのニーズに応じて改良および変更できます。大文字と小文字が区別され、ヘッダー ファイルで定義されていない関数を作成する場合は、構文に従って独自の関数を宣言して定義する必要があります。

ユーザー定義関数の利点

  • 変更可能な機能は必要に応じて変更できます。
  • これらの関数のコードは他のプログラムで再利用できます。
  • これらの関数は理解、デバッグ、保守が簡単です。

例:

C

whileループJava




// C program to show> // user-defined functions> #include> int> sum(>int> a,>int> b)> {> >return> a + b;> }> // Driver code> int> main()> {> >int> a = 30, b = 40;> > >// function call> >int> res = sum(a, b);> >printf>(>'Sum is: %d'>, res);> >return> 0;> }>

>

>

出力

Sum is: 70>

関数にパラメータを渡す

関数の呼び出し時に渡されるデータは、実際のパラメータと呼ばれます。以下のプログラムでは、10 と 30 が実パラメータとして認識されています。仮パラメータは、関数宣言で指定された変数とデータ型です。以下のプログラムでは、a と b は仮パラメータとして知られています。

関数にパラメータを渡す

関数にパラメータを渡す

次の 2 つの方法で引数を C 関数に渡すことができます。

  1. 値による受け渡し
  2. 参照渡し

1.値渡し

このメソッドでパラメータを渡すと、実際のパラメータの値が正式な関数パラメータにコピーされます。その結果、関数内で行われた変更は呼び出し元のパラメーターに反映されません。

例:

C




// C program to show use> // of call by value> #include> void> swap(>int> var1,>int> var2)> {> >int> temp = var1;> >var1 = var2;> >var2 = temp;> }> // Driver code> int> main()> {> >int> var1 = 3, var2 = 2;> >printf>(>'Before swap Value of var1 and var2 is: %d, %d '>,> >var1, var2);> >swap(var1, var2);> >printf>(>'After swap Value of var1 and var2 is: %d, %d'>,> >var1, var2);> >return> 0;> }>

>

>

10/50.00
出力

Before swap Value of var1 and var2 is: 3, 2 After swap Value of var1 and var2 is: 3, 2>

2. 参照渡し

呼び出し元の実パラメータと関数の実パラメータは同じ場所を参照するため、関数内で行われた変更は呼び出し元の実パラメータに反映されます。

例:

C




// C program to show use of> // call by Reference> #include> void> swap(>int> *var1,>int> *var2)> {> >int> temp = *var1;> >*var1 = *var2;> >*var2 = temp;> }> // Driver code> int> main()> {> >int> var1 = 3, var2 = 2;> >printf>(>'Before swap Value of var1 and var2 is: %d, %d '>,> >var1, var2);> >swap(&var1, &var2);> >printf>(>'After swap Value of var1 and var2 is: %d, %d'>,> >var1, var2);> >return> 0;> }>

>

>

出力

Before swap Value of var1 and var2 is: 3, 2 After swap Value of var1 and var2 is: 2, 3>

C の関数の利点

C の関数は、以下に示すように多くの利点がある C の非常に便利な機能です。

  1. この関数を使用すると、プログラム内での同じステートメントの繰り返しを減らすことができます。
  2. この関数はプログラムにモジュール性を提供することでコードを読みやすくします。
  3. 関数の呼び出し数に固定はなく、必要に応じて何度でも呼び出すことができます。
  4. この関数によりプログラムのサイズが削減されます。
  5. 関数が宣言されたら、関数の内部動作について考えずにそのまま使用できます。

C の関数の欠点

C の関数の主な欠点は次のとおりです。

  1. 複数の値を返すことはできません。
  2. スタック フレームの割り当てとプログラム制御の転送によるメモリと時間のオーバーヘッド。

結論

この記事では、次の機能について次の点について説明しました。

アメリカには都市がいくつありますか
  1. 関数は、プログラム内で何度でも再利用できるコードのブロックです。
  2. 関数を使用するには、関数を呼び出す必要があります。
  3. 関数の宣言には、function_name、戻り値の型、パラメーターが含まれます。
  4. 関数定義には関数の本体が含まれます。
  5. 関数にはユーザ定義関数とライブラリ関数の 2 種類があります。
  6. 関数では、渡された値に応じて値による呼び出しと参照による呼び出しの 2 つのタイプに応じて実行できます。

C の関数に関する FAQ

Q1.関数を定義します。

答え:

関数は、プログラムの実行中に呼び出されるたびに実行されるコードのブロックです。

Q2.前方宣言とは何ですか?

答え:

読みやすくするために、呼び出し後に関数を定義する場合もあります。このような場合、関数を定義して呼び出す前に関数を宣言します。このような宣言は、前方宣言と呼ばれます。

Q3.関数の宣言と定義の違いは何ですか?

答え:

関数名、戻り値の型、パラメーターなどのデータは関数宣言に含まれますが、定義は関数の本体です。これらすべてのデータは、対応する手順に従ってコンパイラーと共有されます。

Q4.関数の引数とパラメータの違いは何ですか?

答え:

関数パラメータは、関数宣言で宣言された値です。一方、関数の引数は、関数呼び出し中に関数に渡される値です。

例:

 int func(int x,int y); func(10,20);>

ここで、int x と int y はパラメータであり、10 と 20 は関数に渡される引数です。

詳細については、この記事「C の引数とパラメータの違い」を参照してください。

Q5. C 関数から複数の値を返すことはできますか?

答え:

いいえ、通常、関数から複数の値を返すことはできません。しかし、どちらかを使用できます ポインタ 静的またはヒープ メモリの場所にコピーして複数の値を返すか、データを 構造 そして構造体を返します。

詳細については、この記事を参照してください – C または C++ で関数から複数の値を返すには?

Q6.実際のパラメータと仮パラメータは何ですか?

答え:

仮パラメータ: 関数プロトタイプで宣言された変数は、仮引数またはパラメーターと呼ばれます。

実際のパラメータ: 関数に渡される値は、実引数またはパラメータと呼ばれます。