本版本使用 for 迴圈,並將迴圈計數器 i、階乘迴圈計數器 j 宣告為全域變數。雖然能正常執行,但現代 C 語言實務不建議濫用全域變數,應優先使用區域變數。
#include <stdio.h>
// 不建議:全域變數
// int i, j;
int factorial(int num); // 函式原型宣告
int main()
{
double f = 0;
int flag = 1;
// 建議:迴圈變數宣告在 for 內部,作用域最小化
for (int i = 1; i <= 9; i++) {
f += flag * 1.0 / factorial(i);
flag = -flag;
}
printf("其結果是: %f\n", f);
return 0;
}
int factorial(int num)
{
int k = 1;
// 建議:j 宣告在 for 內部
for (int j = 1; j <= num; j++)
k *= j;
return k;
}
| 特性 | 全域變數 | 區域變數 |
|---|---|---|
| 生命週期 | 程式整個執行期間 | 所在區塊執行期間 |
| 可見範圍 | 整個檔案(含其他函式) | 宣告所在區塊內 |
| 命名衝突風險 | 高 | 低 |
| 除錯難度 | 較難(任何地方可修改) | 較易(範圍限定) |
| 執行緒安全 | 不安全 | 較安全 |
其結果是: 0.632121
for(init; cond; inc) 的 init 子句中const)可考慮全域