在 Turbo C 2.0 中,每個函數都是獨立的代碼塊,函數代碼歸該函數所有。除了對函數的調用外,其他任何函數中的語句都無法訪問它。例如,使用 goto 跳轉語句不能從一個函數跳入另一個函數內部。除非使用全局變量,否則一個函數內部定義的程序代碼和數據不會與另一個函數內的代碼和數據相互影響。
Turbo C 2.0 中所有函數的作用域都處於同一嵌套程度,即不能在一個函數內再聲明或定義另一個函數。此外,一個函數對其他子函數的調用是全局的,即使函數在不同的文件中,也不必附加任何聲明語句即可被另一函數調用,也就是說一個函數對於整個程序都是可見的。
在 Turbo C 2.0 中,變量可以在各個層次的子程序中聲明。在任何函數中,變量聲明不僅允許在函數體開頭處聲明,還允許變量的聲明(包括初始化)跟在一個復合語句的左花括號後面,直到配對的右花括號為止。其作用域僅在這對花括號內,當程序執行到右花括號時,該變量將不復存在。當然,內層中的變量即使與外層中的變量名字相同,它們之間也是沒有關係的。
#include <stdio.h>
int i = 10;
int main() {
int i = 1;
printf("%d\t", i);
{
int i = 2;
printf("%d\t", i);
{
extern i;
i += 1;
printf("%d\t", i);
}
printf("%d\t", ++i);
}
printf("%d\n", ++i);
return 0;
}
運行結果為:1 2 11 3 2
從程序運行結果不難看出程序中各變量之間的關係,以及各個變量的作用域。最外層的全局變量 i=10,主函數開頭定義的 i=1 輸出 1;第一個內層塊定義 i=2 輸出 2;最內層使用 extern i 引用全局變量,將其加 1 變為 11 輸出;退出最內層後,第一個內層的 i 自增輸出 3;最後主函數的 i 自增輸出 2。