C言語6


n.関数


入力時出力値のブラックボックス

関数の使用目的

  • コードの可読性を向上させる
  • コードのメンテナンスと拡張が容易
  • 重複防止
  • ひょうじゅんかんすう


    c言語で提供される基本関数は標準関数と呼ばれ、printfはそのうちの1つである.関数をライブラリ化して使いやすいようにします.ヘッダファイルには多くの標準関数が定義されています.

    カスタム関数


    ユーザーが必要とする機能を関数化して使用できます.

    きほんけいじょう

    자료형 함수이름(인수목록)
    {
    	함수의 내용
    }
  • データ型:関数が値を返すデータ型.戻り値がない場合は、void
  • 引数リスト:関数を渡すために必要な値
  • 2つの整数を受け入れ、1つの和を返します.
    #include <stdio.h>
    
    int Add(int a, int b);
    
    void main()
    {
        int a, b, hap;
        printf("두 개의 정수를 입력하세요 : ");
        scanf("%d%d", &a, &b);
    
        hap = Add(a, b);
        printf("두 수의 합 : %d\n", hap);
    
        return;
    }
    
    
    int Add(int i, int j)
    {
        return i + j;
    }
    一般に、ユーザ定義の関数がmainの関数の後にあるとエラーになるが、Addの関数の最初の行int Add(int a, int b)をセミコロンと一緒に書くと(関数の原型)、mainの関数の後にあってもコンピュータで実行できる.
    ex)関数のプロトタイプ(.h)とソースコード(.dll)を個別に管理するmainで宣言されたa, b値がAdd関数で宣言されたi, jに移行すると、メモリ値はコピーされます(call by value).

    void型関数


    結果値の関数は返されません.
    #include <stdio.h>
    
    int Add(int a, int b);
    void print_Start()
    {
        printf("-----programming start-----\n");
        printf("두 개의 정수를 입력하시오 : ");
    }
    
    void print_Hap(int result)
    {
        printf("두 수의 합은 %d 입니다.\n", result);
        printf("-----programming end-----\n");
    }
    
    void main()
    {
        int a, b, hap;
        print_Start();
        scanf("%d%d", &a, &b);
    
        hap = Add(a, b);
        print_Hap(hap);
    
        return;
    }
    
    
    int Add(int i, int j)
    {
        return i + j;
    }
    -----programming start-----
    두 개의 정수를 입력하시오 : 3 5
    두 수의 합은 8 입니다.
    -----programming end-----
    2つの数値を入力して最高値と最低値を出力する例
    #include <stdio.h>
    void max_min(int i, int j);
    
    int main()
    {
        int a, b;
        printf("두 개의 정수를 입력하세요 : ");
        scanf("%d%d", &a, &b);
        max_min(a, b);
    }
    
    void max_min(int i, int j)
    {
        if(i > j)
        {
            printf("최댓값 : %d  최솟값 : %d\n", i, j);
        }
        else if(j > i)
        {
            printf("최댓값 : %d  최솟값 : %d\n", j, i);
        }
        else 
        {
            printf("두 수의 값이 같습니다.\n");
        }
    }

    変数の範囲


    ゾーン変数


    同名であっても、他の地域({})に属する関数であれば、独立した別の変数である.ゾーン({})が終了すると、スタックメモリから消えます.スタックメモリによって管理され、FILOの性質を有する.

    グローバル変数


    プログラムが起動すると、グローバル変数はメモリに格納され、プログラムが終了すると、グローバル変数はメモリから消えます.グローバル変数はスタックメモリではなくデータメモリによって管理されます.