Saturday, September 1, 2018

C - 関数

関数は、一緒にタスクを実行するステートメントのグループです。 すべてのCプログラムにはmain()という少なくとも1つの関数があり、最も単純なプログラムではすべて追加関数を定義できます。

コードを別々の関数に分割することができます。 異なる関数間でコードをどのように分割するかはあなた次第ですが、論理的には、各関数が特定のタスクを実行するような分割です。

関数宣言は、関数の名前、戻り値の型、およびパラメータについてコンパイラに指示します。 関数定義は関数の実際の本体を提供します。

C標準ライブラリには、プログラムが呼び出すことができる多数の組み込み関数が用意されています。 たとえば、strcat()は2つの文字列を連結し、memcpy()は1つのメモリ位置を別の場所にコピーします。

関数は、メソッド、サブルーチン、プロシージャなどと呼ばれることもあります。


関数の定義

Cプログラミング言語の関数定義の一般的な形式は次のとおりです。
return_type function_name( parameter list ) {
   body of the function
}

Cプログラミングの関数定義は、関数ヘッダーと関数本体で構成されています。 ここには関数のすべての部分があります -

戻り値の型 - 関数は値を返すことがあります。 return_typeは、関数が返す値のデータ型です。 一部の関数は、値を返さずに目的の操作を実行します。 この場合、return_typeはキーワードvoidです。

関数名 - これは関数の実際の名前です。 関数名とパラメータリストが一緒に関数の署名を構成します。

パラメータ - パラメータはプレースホルダのようなものです。 関数が呼び出されると、パラメータに値を渡します。 この値は実際のパラメータまたは引数と呼ばれます。 パラメータリストは、関数のパラメータの型、順序、および数を参照します。 パラメータはオプションです。 つまり、関数にはパラメータが含まれていない可能性があります。

関数本体 - 関数本体には、関数が何をするかを定義するステートメントのコレクションが含まれています。


以下に、max()という関数のソースコードを示します。 この関数は、2つのパラメータnum1とnum2をとり、2つのパラメータの間で最大値を返します
/* function returning the max between two numbers */
int max(int num1, int num2) {

   /* local variable declaration */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}


関数宣言

関数宣言は、コンパイラに関数名とその関数の呼び出し方法を伝えます。 関数の実際の本体は別々に定義することができます。

関数宣言には次の部分があります。
return_type function_name( parameter list );

上で定義した関数max()の場合、関数の宣言は次のようになります。
int max(int num1, int num2);

パラメータの名前は、関数の宣言では重要ではありません。その型だけが必要です。したがって、以下も有効な宣言です。
int max(int, int);

1つのソースファイルで関数を定義し、その関数を別のファイルで呼び出すときは、関数宣言が必要です。 このような場合、関数を呼び出すファイルの先頭に関数を宣言する必要があります。


関数の呼び出し

C関数を作成するときに、関数が何をしなければならないのかを定義します。 関数を使用するには、その関数を呼び出して定義されたタスクを実行する必要があります。

プログラムが関数を呼び出すと、プログラム制御は呼び出された関数に移ります。 呼び出された関数は定義されたタスクを実行し、そのreturn文が実行されたとき、または関数の終了時にブレースに達すると、プログラム制御をメインプログラムに戻します。

関数を呼び出すには、必要なパラメータを関数名とともに渡すだけでよく、関数が値を返す場合は、返された値を格納することができます。 例えば -
#include <stdio.h>
 
/* function declaration */
int max(int num1, int num2);
 
int main () {

   /* local variable definition */
   int a = 100;
   int b = 200;
   int ret;
 
   /* calling a function to get max value */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}
 
/* function returning the max between two numbers */
int max(int num1, int num2) {

   /* local variable declaration */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}
main()と一緒にmax()を保ち、ソースコードをコンパイルしました。 最終実行ファイルを実行している間、次の結果が生成されます。

Max value is : 200


関数の引数

関数が引数を使用する場合は、引数の値を受け入れる変数を宣言する必要があります。 これらの変数は、関数の仮パラメータと呼ばれます。

形式的パラメータは、関数内の他のローカル変数と同様に動作し、関数への入力時に作成され、終了時に破棄されます。

関数を呼び出す際に、引数を関数に渡すには2つの方法があります。

Sr.No.Call Type & Description
1Call by value
This method copies the actual value of an argument into the formal parameter of the function. In this case, changes made to the parameter inside the function have no effect on the argument.
2Call by reference
This method copies the address of an argument into the formal parameter. Inside the function, the address is used to access the actual argument used in the call. This means that changes made to the parameter affect the argument.
デフォルトでは、Cは値渡しを使用して引数を渡します。 一般に、関数内のコードは関数を呼び出すために使用される引数を変更できないことを意味します。










No comments:

Post a Comment

Interfaces and their protocol stacks

インタフェースとそのプロトコルスタック 主要なネットワーク要素に精通した後、これら要素間のインタフェースをよりよく知る時期が来ています。 インタフェースは、MME、SGWおよびPGWが他のネットワーク要素(例えば、HSSまたはPCRF)と協働することを可能にする。 それらの...