いくつかの理由が考えられます:
デバッグ/テスト目的 (警告 - このコードはテストしていません):
#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 日以上使用する場合は、通常、グローバルを避けます。