logo

C のユーザー定義関数

ユーザー定義関数 は、特定のタスクを実行するためにユーザー自身が定義する C 言語の関数の一種です。これにより、コードの再利用性とモジュール性がプログラムに提供されます。ユーザー定義関数は組み込み関数とは異なり、その動作はユーザーによって指定され、使用時にヘッダー ファイルは必要ありません。

この記事では、について学びます ユーザー定義関数、関数プロトタイプ、関数定義、関数呼び出し、およびパラメーターを関数に渡すさまざまな方法。



C でユーザー定義関数を使用するにはどうすればよいですか?

ユーザー定義関数を使用するには、まずその構文のさまざまな部分を理解する必要があります。 C のユーザー定義関数は、次の 3 つの部分に分割できます。

  1. 関数プロトタイプ
  2. 関数の定義
  3. 関数呼び出し

C 関数のプロトタイプ

関数プロトタイプは、関数宣言とも呼ばれ、 関数の名前、関数のパラメータ、 そして 戻り値の型 。関数プロトタイプには関数の本体は含まれません。これは基本的に、プログラムの後半で使用できるユーザー定義関数の存在をコンパイラに通知するために使用されます。

構文

return_type function_name  (type1 arg1 , type2 arg2 , ... typeN argN );>

関数プロトタイプ内の引数の名前をスキップすることもできます。それで、



return_type function_name  (type1 , type2 , ... typeN);>
関数プロトタイプ

C 関数の定義

関数が呼び出されると、関数定義には実行される実際のステートメントが含まれます。関数定義のすべてのステートメントは で囲まれています。 { } ブレース。

構文

return_type function_name (type1 arg1 , type2 arg2 .... typeN argN ) { // actual statements to be executed  // return value if any }>

注記: 関数定義の後に関数呼び出しが存在する場合は、関数のプロトタイプ部分をスキップして関数を直接定義できます。

C 関数呼び出し

ユーザー定義関数に制御を移すには、それを呼び出す必要があります。関数は、名前の後に丸括弧を付けて呼び出されます。それらの引数は括弧内に渡されます。



構文

function_name(arg1, arg2, ... argN);>

ユーザー定義関数の例

次の C プログラムは、プログラム内でユーザー定義関数を使用する方法を示しています。

C




// C Program to illustrate the use of user-defined function> #include> // Function prototype> int> sum(>int>,>int>);> // Function definition> int> sum(>int> x,>int> y)> {> >int> sum;> >sum = x + y;> >return> x + y;> }> // Driver code> int> main()> {> >int> x = 10, y = 11;> >// Function call> >int> result = sum(x, y);> >printf>(>'Sum of %d and %d = %d '>, x, y, result);> >return> 0;> }>

ノートパソコンのキーボードのInsertキーはどこにありますか

>

>

Linuxのショートカット
出力

Sum of 10 and 11 = 21>

関数定義のコンポーネント

関数定義には 3 つのコンポーネントがあります。

  1. 関数パラメータ
  2. 関数本体
  3. 戻り値

1. 関数パラメータ

関数パラメーター (引数とも呼ばれます) は、呼び出し元によって呼び出された関数に渡される値です。関数パラメータをまったく渡さなくても、任意の数を関数に渡すこともできます。

関数定義で関数名とその型を定義する必要があり、関数呼び出しでは同じ数と型のパラメータのみを渡すことができます。

int foo ( int a, int b) ;>

ここ、 ある そして b 関数パラメータです。

注記: C 言語には、可変数の引数を関数に渡すことができるメソッドが用意されています。このような関数は、 可変個引数関数 と呼ばれます。

2. 機能本体

関数本体は、{ } 中括弧で囲まれた一連のステートメントです。これらは、関数が呼び出されたときに実行されるステートメントです。

int foo (int a, int b) { int sum = a + b;  return sum; }>

ここで、間のステートメントは、 { そして } 関数本体です。

3. 戻り値

戻り値は、関数によって呼び出し元に返される値です。関数は単一の値のみを返すことができ、これはオプションです。値を返さない場合、戻り値の型は void として定義されます。

キーワードを返す 関数から値を返すために使用されます。

構文

 return ( expression );>

 int  foo (int a, int b) { return a + b; }>

注記: ポインターまたは構造体を使用して、C の関数から複数の値を返すことができます。

ユーザー定義関数にパラメータを渡す

C では、次の 2 つの方法を使用して関数にパラメータを渡すことができます。

  1. 値による呼び出し
  2. 参照による呼び出し

1. 値による呼び出し

値による呼び出しでは、値のコピーが関数に渡され、関数に加えられた変更は値に反映されません。実引数と仮引数は、異なるメモリ場所に作成されます。

C




// C program to show use of> // call by value> #include> void> swap(>int> a,>int> b)> {> >int> temp = a;> >a = b;> >b = temp;> }> // Driver code> int> main()> {> >int> x = 10, y = 20;> >printf>(>'Values of x and y before swap are: %d, %d '>, x,> >y);> >swap(x, y);> >printf>(>'Values of x and y after swap are: %d, %d'>, x,> >y);> >return> 0;> }>

>

「メイソンの公式」
>

出力

Values of x and y before swap are: 10, 20 Values of x and y after swap are: 10, 20>

注記: 値は参照によって渡されないため、値による呼び出しでは変更されません。

2. 参照による呼び出し

参照による呼び出しでは、引数のアドレスが関数に渡され、関数に加えられた変更が値に反映されます。私たちが使用するのは、 ポインタ 関数でアドレスを受け取るために必要なタイプ。

C

Java 置換オール




// C program to implement> // Call by Reference> #include> void> swap(>int>* a,>int>* b)> {> >int> temp = *a;> >*a = *b;> >*b = temp;> }> // Driver code> int> main()> {> >int> x = 10, y = 20;> >printf>(>'Values of x and y before swap are: %d, %d '>, x,> >y);> >swap(&x, &y);> >printf>(>'Values of x and y after swap are: %d, %d'>, x,> >y);> >return> 0;> }>

>

>

出力

Values of x and y before swap are: 10, 20 Values of x and y after swap are: 20, 10>

詳細については、「値による呼び出しと参照による呼び出しの違い」の記事を参照してください。

ユーザー定義関数の利点

プログラム内で関数を使用する利点は次のとおりです。

  • 関数を使用すると、プログラム内のコードの重複を避けることができます。コードをより速く書くことができ、結果として読みやすくなります。
  • コードは関数を使用して分割および征服できます。このプロセスは分割統治として知られています。 main 関数内に大量のコードを記述したり、テストやデバッグを行うのは困難です。関数を使用すると、1 つのタスクをいくつかの小さなサブタスクに分割できるため、全体の複雑さが軽減されます。
  • たとえば、C で pow や sqrt などを実装方法を知らずに使用する場合、関数を使用して実装の詳細を隠すことができます。
  • ほとんど変更を加えることなく、あるプログラムで開発された機能を別のプログラムで使用できるため、開発時間が短縮されます。