いくつかの理由が考えられます:
デバッグ/テスト目的 (警告 - このコードはテストしていません):
#include <stdio.h>
#define MAX_INPUT 46
int runs=0;
int fib1(int n){
    ++runs;
    return n>2?fib1(n-1)+fib1(n-2):1;
};
int fib2(int n,int *cache,int *len){
    ++runs;
    if(n<=2){
        if(*len==2)
            return 1;
        *len=2;
        return cache[0]=cache[1]=1;
    }else if(*len>=n)
        return cache[n-1];
    else{
        if(*len!=n-1)
            fib2(n-1,cache,len);
        *len=n;
        return cache[n-1]=cache[n-2]+cache[n-3];
    };
};
int main(){
    int n;
    int cache[MAX_INPUT];
    int len=0;
    scanf("%i",&n);
    if(!n||n>MAX_INPUT)
        return 0;
    printf("fib1(%i)==%i",n,fib1(n));
    printf(", %i run(s)\n",runs);
    runs=0;
    printf("fib2(%i)==%i",n,fib2(n,&cache,&len));
    printf(", %i run(s)\n",runs);
    main();
};
私は fib2 にスコープ変数を使用しましたが、それはグローバルが役立つ可能性があるもう 1 つのシナリオです (データを永久に取得することを避けるためにデータを保存する必要がある純粋な数学関数)。
一度だけ使用するプログラム (コンテストなど)、または開発時間を短縮する必要がある場合
グローバルは、どこかの関数が int ではなく *int を必要とする型付き定数として役立ちます。
プログラムを 1 日以上使用する場合は、通常、グローバルを避けます。