Cho chương trình sau:
PROGRAM VI_DU
VAR
x : Integer ;
Procedure A ;
Var
Y : Integer ;
Procedure AA ;
Var
M, N : Integer ;
Begin
…
End ;
Procedure AB ;
Var
M, N : Integer ;
Begin
…
End ;
Begin
…
End ; {Procedure A}
Procedure B ;
Var
X, Z : Integer ;
Procedure BA ;
Begin
…
End ;
Begin
…
End ; {Procedure B}
BEGIN
…
END. {Chương trình chính }
Trong PROGRAM VI_DU, chương trinh con A và B có mức là 1, chương trình con AA, AB, BA có mức là 2.
Sau đây là một số qui tắc sử dụng:
• Tầm tác dụng của một tên (biến, hằng, kiểu...) được xác định bằng mức Bloc trong đó tên được khai báo và bằng các mức Bloc khác có mức cao hơn và nằm trong Bloc chứa khai báo.
■ Ví dụ : Trong PROGRAM VI_DU, biến Y được khai báo trong CTC A (có mức là 1). Như vậy biến Y có thể được sử dụng ở trong CTC A (là nơi khai báo) và trong CTC AA và AB (là 2 CTC có mức cao hơn và nằm trong CTC A). Ngoài ra Y không thể được sử dụng ở CTC B, BA, BB vì chúng không phải là CTC của A.
• Tầm tác dụng của các biến khai báo ở mức 0 (chương trình chính) là toàn bộ chương trình.
• Ở các mức khác nhau của các CTC, ta có thể khai báo một biến có cùng tên với biến ở mức khác. Tên biến này không phải là một biến duy nhất mà là hai biến khác nhau với tầm tác dụng khác nhau. Ví dụ trong PROGRAM VI_DU, CTC B có biến địa phương X và trong chương trình chính có biến toàn cục cũng có là X. Khi đó trong CTC thì biến X địa phương có tác dụng, còn khi CTC kết thúc thì biến toàn cục lại lấy lại tác dụng của nó. Hãy xét kỹ ví dụ cụ thể sau:
PROGRAM TAM_TAC_DUNG) ;
Var I : integer ; {biến 1 địa phương}
Begin
I := 7 ; writein (1:6);
End ;
Begin
I := 5 ;
Writeln (1:6);
DIA_PHUONG ;
Writein (i : 6) ;
End.
Kết quả cho ra :
5 {giá trị của I toàn cục}
7 {giá trị của I địa phương}
5 {giá trị của I toàn cục}
Tên biến I được dùng cho cả biến toàn cục và biến địa phương. Đầu tiên biến I toàn cục nhận giá trị bằng 5. Sau đó thủ tục DIA_PHUONG được gọi. Vì thủ tục này cũng có biến tên là I (biến địa phương) nên biến I toàn cục được xem như tạm bị treo không dùng đến. Biến địa phương lấy giá trị bằng 7. Sau khi kết thúc CTC, biến I địa phương bị mất và biến I toàn cục lại được khôi phục lại tác dụng. Tất nhiên nó vẫn giữ giá trị bằng 5 là giá trị có được trước khi gọi thủ tục DIA_PHUONG.
Trường hợp trong thủ tục DIA_PHUONG, ta muốn chiếu đến biến I toàn cục, ta vẫn có thể dùng nó bằng cách chỉ rõ tên chương trình ngoài tên biến ; TAM_TAC_DUNG. i. Cách tham chiếu như trên cũng tương tự như khi ta chỉ ra đường dẫn trực tiếp trên DOS.