[c言語] さっと復習(6) 関数

関数

関数とは、一連の処理をまとめたもの。

cでは、main で使う関数は main より前に定義する。

#include <stdio.h>

double avg(double a, double b) {
    double ans;
    ans = (a + b) / 2.0;
    return ans;
}

int main(void) {
    double a, b, ans;

    printf("Return the average of 2 numbers.\n");
    printf("Please input first one: ");
    scanf("%lf", &a);
    printf("lease input second one: ");
    scanf("%lf", &b);

    ans = avg(a, b);
    printf("The average of %f and %f is %f.\n", a, b, ans);
    
    return 0;
}

プロトタイプ宣言

main 前にたくさん関数を書くとゴチャゴチャしてわかりにくい。

main の前では関数の宣言だけを行い(プロトタイプ宣言)、main のあとに関数の処理を記述することができる。

#include <stdio.h>

// プロトタイプ宣言 関数の宣言だけを行い、定義はmainのあと。
double avg(double, double);

int main(void) {
    double a, b, ans;

    printf("Return the average of 2 numbers.\n");
    printf("Please input first one: ");
    scanf("%lf", &a);
    printf("lease input second one: ");
    scanf("%lf", &b);

    ans = avg(a, b);
    printf("The average of %f and %f is %f.\n", a, b, ans);
    
    return 0;
}

// プロトタイプ宣言した関数の処理
double avg(double a, double b) {
    double ans;
    ans = (a + b) / 2.0;
    return ans;
}

スコープ

グローバル変数とローカル変数のスコープ。

#include <stdio.h>

// global変数
int global_var = 10;

void func(void);

int main(void) {
    double local_var = 123.4;
    printf("mainスタート\n");
    printf("グローバル変数: %d\n", global_var);
    printf("mainのローカル変数: %lf\n", local_var);
    printf("*******\n");

    func();

    printf("mainスタート\n");
    printf("func内で書き換えられたグローバル変数にmainでアクセス: %d\n", global_var);
}

void func(void) {
    double local_var = 567.8;
    
    printf("funcスタート\n");
    printf("グローバル変数: %d\n", global_var);
    printf("funcのローカル変数: %lf\n", local_var);
    printf("funcでグローバル変数を20に書き換え\n");
    global_var = 20;
    printf("*******\n");
}