Định hướng chương trình dịch trong Pascal, sử dụng trên các trình biên dịch thông dụng
ALIGN DATA Cú pháp {$A+} {$A-} Mặc định {$A+} bật chế độ bố trí theo word để chạy nhanh Kiểu Global: có ảnh hưởng tới toàn trình dịch Ghi Định hướng $A chọn hai cách bố trí biến định kiểu với đơn vị theo byte theo word Trong trạng thái {$A+}, tất biến định kiểu có kích thước lớn byte bố trí theo đơn vị word Nếu cần, byte vô ích chèn vào biến để thực việc bố trí Điều có nghóa ta tốn nhớ để làm việc chèn thêm byte vô ích Định hướng {$A+} không ảnh hưởng tới biến có kích thước tính theo byte không ảnh hưởng tới trường ghi phần tử mảng Một trường ghi bố trí theo word kích thước tổng cộng tất trường trước chẵn Đối với phần tử mảng để bố trí theo word kích thước hần tử phải chẵn Trong trạng thái {$A-}, biện pháp bố trí dùng Các biến định kiểu thay cách đơn giản địa cách liên tục bất chấp kích thước chúng Bất chấp trạng thái định hùng $A, phần khai báo Var Const toàn cục bắt đầu địa tính theo word Tương tự, chương trình dịch giữ trỏ Stack theo đơn vị word cách bố trí thêm byte không sử dụng khuôn Stack thủ tục có yêu cầu BOOLEAN EVALUATION Cú pháp {$B+} {$B-} Mặc định {$B+} tính biểu thức Boolean cách đầy đủ Kiểu Local Ghi Định hướng $B chuyển trạng thái bật/tắt hai mô hình khác mã sinh mã toán tử AND OR Trong trạng thái {$B+}, chương trình tạo mã để tính toán biểu thức Boolean cách đầy đủ Điều có nghóa toán hạng biểu thức Boolean phép toán AND OR bảo đảm tính hết, chí kết toàn biểu thức biết, tính xong Thí dụ với biểu thức: (0 AND X) AND Y luôn với X Y Song với {$B+}, máy tính tính hết phép toán trên, không nề hà lãng phí thời gian Trong trạng thái {$B-}, chương trình dịch tạo mã để tính nhanh biểu thức Boolean, nghóa trình tính biểu thức Boolean dừng lại sau kết biểu thức Boolean trở nên hiển nhiên, không cần phải tính thêm DEBUG IMFORMATION Cú pháp {$D+} {$D-} Mặc định {$D+} lập thông tin gỡ rối Kiểu Global Ghi Định hướng dịch $D thiết lập không thiết lập thông tin gỡ rối (debug) Thông tin bao gồm bảng dòng đánh số cho thủ tục, ánh xạ địa mã với số dòng văn nguồn Đối với Unit, thông tin gỡ rối (debug) ghi tệp TPU với mã OBJ unit Thông tin gỡ rối làm tăng nhanh kích thước tệp TPU bố trí thêm chỗ dịch chương trình có dùng unit, song không làm ảnh hưởng tới kích thước tốc độ chương trình dịch để chạy Khi chương trình hay unit dịch với {SD+}, gỡ rối nằm môi trường khép kín IDE cho phép bạn chạy chương trình bước (step by step) thiết lập điểm dừng modun Các lựa chọn Debug đứng (Option| Debugger) tệp đồ (Option| Linker) tạo thông tin dòng cách đầy đủ modun cho bạn dịch modun với {$D+) Định hướng $D thường sử dụng để liên kết với định hướng $L định hướng cho phép không cho phép việc tạo thông tin kí hiệu cục để gỡ rối Nếu bạn muốn sử dụng Turbo Debuger để gỡ rối chương trình bạn, thiết lập Compiler| Destination to Disk, sau chọn Option| Debugger lựa chọn Standalone EMULATION Cú pháp {$E+} {$E-} Mặc định {$E+} Kiểu Global Ghi Định hướng dịch $E thiết lập hay không việc kết nối với thư viện thời gian thực tạo đồng sử lý số học 80x87 đồng sử lý máy Khi bạn dịch chương trình với {$N+, E+}, Turbo Pascal liên kết với tạo 80x87 đầy đủ Tệp EXE nhận được dùng máy có đồng xử lý máy hay không Nếu thấy co 80x87, Turbo Pascal sử dụng đồng xử lý, không thư viện thực tạo để chạy (lấy phần mềm thay cho phần cúng) Trong trạng thái {$N+, E-}, Turbo Pascal tạo chương trình chạy có đồng xử lý số học Chuyển mạch bật/tắt tạo cho 80x87 không đem lại kết sử dụng unit, nghóa áp dụng cho việc dịch chương trình Thêm chương trình tất unit chương trình dịch với trạng thái {$N-} thư viện thời gian thực cho 80x87 không yêu cầu việc chuyển mạch cho tạo 80x87 bị bỏ qua EXTENDED SYNTAX Cú pháp {$X+} {$X-} Mặc định {$X+} Kiểu Global Ghi Định hướng dịch $X chuyển bật/tắt cú pháp mở rộng Turbo Pascal Các câu lệnh hàm Trong chế độ {$X+}, lời gọi hàm thực thủ tục, nghóa kết lời gọi hàm hủy bỏ Nói chung tính toán thực hàm biểu diễn qua kết nó, việc hủy bỏ kết điều nhạy cảm nhỏ Tuy nhiên số trường hợp, hàm thực nhiều thao tác vào tham số nó, số trường hợp lại không tạo kết hữu ích Trong trường hợp thế, mở rộng {$X+} cho phép hàm xử lý thủ tục Các xâu kết thúc kí tự Null Một định hướng dịch {$A+} cho phép hổ trợ sử dụng xâu Null cách kích hoạt quy tắc đặc biệt để áp dụng cho kiểu Pchar FORCE FAR CALLS Cú pháp {$F+} {$F-} Mặc định {$F-} tự động chọn cách gọi xa - gần Kiểu Local Ghi Định hướng dịch $F xác định kiểu gọi thủ tục hàm áp dụng Các thủ tục hàm dịch trạng thái {$F+} luôn sử dụng cách gọi xa (Far Call) Trong trạng thái {$F-},Turbo Pascal tự động chọn mô hình thích hợp, nghóa gọi xa thủ tục hàm khai báo phần Interface Unit, trường hợp lại máy chọn cách gọi gần (Near Call) GENERATE 80286 CODE Cú pháp {$G+} {$G-} Mặc định {$G-} Kiểu Global Ghi Định hướng $G chuyển trạng thái cho việc tạo hay không tạo mã cho 80266 Trong trạng thái {$G-}, có lệnh cho 8086 tạo chương trình dịch trường hợp chạy họ máy 80 x 86 Bạn viết dẫn {$G-} chỗ trống chương trình bạn Trong trạng thái {$G+}, chương trình dịch dùng thêm cấu trúc lệnh 80286 để cải thiện việc tạo mã lệnh, song chương trình dịch trạng thái chạy với vi xử lý 8088 8086 Các lệnh bổ sung thêm sử dụng trạng thái {$G+} bao gồm: Enter, Push, Leave tức thời, IMUL mở rộng SHR, SHL mở rộng INPUT/OUTPUT CHECKING Cú pháp {$I+} {$I-} Mặc định {$I+} Kiểu Local Ghi Định hướng chuyển mạch bật/tắt cho phép tạo không việc tạo mã tự động để kiểm tra kết lời gọi thủ tục vào/ra Nếu thủ tục vào trả lại kết IOResult khác trạng thái {$I+}, chương trình tự động dừng lại với thông báo Runtime Error Trong trạng thái {$I-}, tức chuyển mạch sang tắt (off), máy không thông báo lỗi bạn phải tự kiểm tra lỗi vào/ra lời gọi IOResult LINK OBJECT FILE Cú pháp {$L FileName} Kiểu Local Ghi Định hướng tham số $L dẫn cho chương trình dịch liên kết tệp FileName với chương trình Unit dịch Định hướng $L dùng để liên kết mã chương trình viết hợp ngữ cho chương trình miêu tả External Tệp đặt tên phải moat tệp OBJ Nếu FileName không rõ đường dẫn tìm kiếm thư mục hành, sau thư mục rõ hộp thoại Options| Directories| Object Directories LOCAL SYMBO INFORMATION Cú pháp {$L+} hay {$L-} Mặc định {$L+} Kiểu Local Ghi Kí hiệu $L dùng để bật/tắt việc tạo thông tin kí hiệu cục Thông tin bao gồm tên kiểu tất biến modun, nghóa kí hiệu phần Implementation modun đó, kí hiệu bên thủ tục hàm modun Với Unit, thông tin hiệu cục ghi vào tệp TPU với mã đối tượng Unit Thông tin kí hiệu cục làm tăng kích thước tệp TPU tạo thêm chỗ trống dịch chương trình dùng Unit đó, song không ảnh hưởng tới kích thước tốc độ chương trình chạy cuối Khi chương trình hay Unit dịch với {$L+}, chương trình gỡ rối nằm Turbo Pascal cho phép bạn xem, kiểm tra thay đổi biến cục modun Thêm nữa, kiểm tra lời gọi thủ tục hàm modun qua View| Call Stack Việc gỡ rối độc lập (Option| Debugger) lựa chọn tệp đồ (Map File) với Option| Linker tạo thông tin kí hiệu địa phương cho modun dịch trạng thái {$L+} Định hướng $L thường dùng với định hướng $D định hướng thiết lập hay không thiết lập việc tạo bảng đánh số dòng để gở rối.Định hướng $L bị bỏ qua chương trình dịch trạng thái {$D-} NUMERIC COPROCESSOR Cú pháp {$N+} {$N-} Mặc định {$N-} Kiểu Local Ghi Định hướng $N bật/tắt hai chế độ khác việc sinh mã dấu chấm động Turbo Pascal Trong trạng thái {SN-}, mã tạo để thực tính toán số thực phần mềm cách gọi tới thư viện thời gian thực Còn trạng thái {$N+}, mã tạo để tính toán kiểu số thực đồng xử lý toán học 80x87 OPEN STRING PARAMETER Cú pháp {$P+} {$P-} Mặc định {$P-} Kiểu Local Ghi Định hướng $P điều khiển ý nghóa tham biến khai báo với từ khóa String Trong trạng thái {$P-}, tham biến khai báo dùng từ khoá String tham biến bình thường trạng thái {$P+}, chúng tham số String mở Không liên quan đến trạng thái thiết lập $P, tên OpenString luôn sử dụng để khai báo tham số mở OVERFLOW CHECKING Cú pháp {$Q+} {$Q-} Mặc định {$Q-} Kiểu Local Ghi Định hướng $Q điều khiển việc tạo mã để kiểm tra tràn Trong trạng thái {$Q+}, số lệnh toán học với số nguyên (+, -, *, /, Abs, Sqr, Succ, Pred) kiểm tra xem có tràn không Mã lệnh số nguyên thêm phần để kiểm tra xem kết có nằm khoảng giá trị cho phép Nếu gặp tượng tràn dừng chương trình báo lỗi {$Q+} không ảnh hưởng tới thủ tục chuẩn Dec Inc Những thủ tục không kiểm tra tràn Chuyển mạch $Q thường dùng với chuyển mạch $R chuyển mạch thiết lập không thiết lập việc tạo mã kiểm tra khoảng giá trị Việc kiểm tra tràn làm cho chương trình bạn chạy chậm kích thước chương trình lớn chút Do nên dùng {$Q+} cho việc gỡ rối OVERLAY CODE GENERATION Cú pháp {$O+} {$O-} Mặc định {$O-} Kiểu Local Ghi Định hướng $O dùng để bật/tắt việc tạo mã phủ Turbo Pascal cho phép Unit phủ dịch với {$P+} Trong trạng thái này, phận tạo mã có số biện pháp ngăn ngừa đặc biệt chuyển tham số String tập từ thủ tục hay hàm phủ tới thủ tục/hàm khác Sử dụng {$O+} Unit không bắt buộc bạn phải phủ Unit Nó hướng dẫn Turbo Pascal bảo đảm Unit phủ bạn muốn Nếu bạn muốn phát triển Unit để sau cho ứng dụng có phủ không phủ, việc dịch chúng với $O+ đảm bảo với bạn bạn tạo phiên chương trình nguồn Định hướng chương trình dịch {$O+} thường dùng với định hướng {$F+} để thỏa mãn việc quản lý bao phủ cho yêu cầu gọi xa RANGE CHECKING Cú pháp {$R+} {$R-} Mặc định {$R-} Kiểu Local Ghi Định hướng $R dùng để bật/tắt việc tạo mã kiểm tra dải giá trị, nghóa xem giá trị có nằm khoảng cho phép hay không Trong trạng thái {$R+}, tất biểu thức mảng số chuỗi thẩm tra dải giá trị tất phép gán cho biến vô hướng biến khoảng kiểm tra dải giá trị Nếu việc kiểm tra thấy sai, ngừng chương trình lại thông báo lỗi Nếu $R bất, lời gọi tới hành vi ảo kiểm tra tình trạng khởi tạo cá thể gọi Nếu cá thể gọi không khởi tạo Contructor nó, máy báo lỗi kiểm tra giá trị Bật kiểm tra dải giá trị kiểm tra lời gọi hành vi ảo làm chậm chương trình bạn làm tăng kích thước chương trình, dùng {$R+} để gỡ rối STACK-OVERFLOW CHECKING Cú pháp {$S+} {$S-} Mặc định {$S+} Kiểu Local Ghi Định hướng $S thiết lập hay không thiết lập việc tạo mã kiểm tra tràn Stack Trong trạng thái {$S+}, chương trình tạo mã đầu thủ tục hay hàm để kiểm tra xem không gian Stack có đủ để lưu trữ biến địa phương việc lưu trữ tạm thời khác Khi không đủ không gian Stack lời gọi tới hàm hay thủ tục dịch với {$S+} dẫn đến dừng chương trình xuất thông báo lỗi Trong trạng thái {$S-}, lời gọi làm cho hệ thống bị hỏng SYMBO REFERENCE Cú pháp {$Y+} {$Y-} Mặc định {$Y+} Kiểu Local Ghi Định hướng $Y dùng để bật/tắt việc tạo thông tin tham khảo kí hiệu Thông tin bao gồm bảng cung cấp số dòng tất khai báo, kí hiệu tham khảo tới kí hiệu modun Đối với Unit, thông tin tham khảo kí hiệu ghi tệp TPU với mã đối tượng Unit Thông tin tham khảo kí hiệu làm tăng kích thước tệp TPU không ảnh hưởng tới tốc độ kích thước chương trình dịch để chạy Khi chương trình hay Unit dịch với {$Y+}, xem duyệt Turbo Pascal hiển thị định nghóa kí hiệu thông tin tham khảo cho modun $Y thường dùng với $D và$L, định hướng điều khiển việc tạo thông tin gỡ rối thông tin kí hiệu cục Định hướng $Y tác dụng trừ hai $D $L thiết lập TYPE-CHECKING POINTERS Cú pháp {$T+} {$T-} Mặc định {$T-} Kiểu Global Ghi Định hướng $T điều khiển kiểu liệu trỏ tạo từ toán tử @ Trong trạng thái {$T-}, kết toán tử @ trỏ Nói cách khác kết kiểu trỏ không định kiểu tương thích với kiểu trỏ khác.Khi @ áp dụng cho biến trạng thái {$T+}, kiểu kết ^T T kiểu biến Nói cách khác, kết kiểu tương thích với trỏ khác trỏ tới kiểu biến VAR-STRING CHECKING Cú pháp {$V+} {$V-} Mặc định {$V+} Kiểu Local Ghi Định hướng $V điều khiển việc kiểm tra kiểu String chuyển qua thủ tục /hàm tham số Trong trạng thái {$V+}, việc kiểm tra kiểu xác hoàn toàn thực hiện, nghóa tham số hình thức tham số thực phải đồng giống kiểu Trong trạng thái {$V-}, gọi trạng thái buông lỏng, biến kiểu String phép chuyển qua tham số String thực chiều dài cực đại khai báo không giống với tham số hình thức Trạng thái {$V-} chủ yếu cung cấp phiên không an toàn tham số String mở Mặc dầu {$V-} ủng hộ, bạn dùng tham số chuỗi mở INCLUDE FILE Cú pháp {$I FileName} Kiểu Local Ghi Định hướng tham số $I dẫn cho chương trình dịch gộp lấy tệp FileName nằm bên chương trình nguồn dịch vào trình dịch Phần mở rộng ngầm định cho tệp FileName đuôi Pas Nếu FileName không rõ đường dẫn thư mục tìm thư mục hành, sau Turbo Pascal tìm thư mục nêu hộp thoại Option| Directories| Include Directories Có hạn chế việc sử dụng tệp gộp vào: tệp gộp đặt phần câu lệnh Trên thực tế tất câu lệnh nằm Begin End phải tồn tệp nguồn OVERLAY UNIT NAME Cú pháp {$O UnitName} Kiểu Local Ghi Định hướng tên đơn vị phủ (Overlay Unit Name) bật Unit vào chương trình phủ Định hướng {$O UnitName} tác dụng sử dụng Unit Khi dịch chương trình, Unit chương trình sử dụng phải đặt tệp OVR thay tệp EXE Các định hướng {$O UnitName} phải đặt sau phần Uses chương trình Pascal thông báo lỗi bạn cố tình phủ Unit không dịch với {$O+} MEMORY ALLOCATION Cú pháp {$M StackSize, HeapMin, HeapMax}} Mặc định {$M 16384, 0, 655360} Kiểu Local Ghi chúù Định hướng $M rõ tham số bố trí nhớ chương trình ứng dụng Kích thước Stack phải nằm khoảng 1024 65520, kích thước Segmen Stack HeapMin, HeapMax giá trị cực đại cực tiểu tương ứng nhớ biến động (Heap) HeapMin phải nằm khoảng 655360 HeapMax nằm HeapMin 655360 Định hướng $M kết sử dụng Unit DEFINE DIRECTIVE Cú pháp {$DEFINE Name} Ghi Định nghóa kí hiệu điều kiện với tên Kí hiệu tên nhận biết cho phần dịch lại modun định nghóa xuất định hướng {$UNDEF Name} Ví dụ Ví dụ chung cho định hướng {$ELSE}, {$IFDEF}, {$ENDIF} {$DEFINE Hoi_Dap} (* Định nghóa tên Hoi_Dap *) {$IFDEF Hoi_Dap} (* Nếu có định nghóa Hoi_Dap chương trình dịch dịch phần mã nguồn có {$ELSE} {$ENDIF Hoi_Dap} *) Write(' Cho X = ') ; Readln ( X ) ; {$ELSE} (* Chương trình dịch dịch phần mã nguồn {$ENDIF Hoi_Dap} định nghóa Hpi_Dap, tức bỏ đổi tên định hướng {$DEFINE} *) Readln ( X ) ; {$ENDIF} (* Keát thúc điều kiện dịch với định nghóa DEFINE*) ELSE DIRECTIVE Cú pháp {$ELSE} Ghi Bật tắt việc dịch hay bỏ qua văn nguồn ngăn cách định hướng {$IF xxx} định hướng {$ENDIF} Ví dụ Xem mục DEFINE ENDIF DIRECTIVE Cú pháp {$ENDIF} Ghi Kết thúc phần dịch có điều kiện viết tắt {IF xxx} Ví dụ Xem mục DEFINE IFDEF DIRECTIVE Cú pháp {$IFDEF Name} Ghi Dịch văn nguồn theo sau có Name định nghóa qua {$DEFINE} Ví dụ : Xem mục DEFINE IFNDEF DIRECTIVE Cú pháp {$IFNDEF Name} Ghi Dịch văn nguồn theo sau Name định nghóa Đây trường hợp ngược lại với cách viết {$IFDEF} Ví dụ : Xem mục DEFINE IFOPT DIRECTIVE Cú pháp {$IFOPT Switch} Ghi Dịch văn nguồn theo sau Switch name trạng thái nêu Switch bao gồm tên chuyển mạch bật/tắt theo sau dấu - hay dấu + Ví dụ cấu trúc : {$IFOPT N+} Type Real = Extended ; {$ENDIF} dịch khai báo kiểu $N hoạt động UNDEF DIRECTIVE Cú pháp {$UNDEF Name} Ghi Không định nghóa hay làm tác dụng kí hiệu điều kiện định nghóa trước Kí hiệu bị bỏ quên với phần lại trình dịch tận xuất trở lại địng hướng {$DEFINE Name} Định hướng {UNDEF Name} ảnh hưởng Name chưa định nghóa ... Kiểu Local Ghi Định hướng tham số $L dẫn cho chương trình dịch liên kết tệp FileName với chương trình Unit dịch Định hướng $L dùng để liên kết mã chương trình viết hợp ngữ cho chương trình miêu tả... modun dịch trạng thái {$L+} Định hướng $L thường dùng với định hướng $D định hướng thiết lập hay không thiết lập việc tạo bảng đánh số dòng để gở rối .Định hướng $L bị bỏ qua chương trình dịch. .. chỗ trống dịch chương trình dùng Unit đó, song không ảnh hưởng tới kích thước tốc độ chương trình chạy cuối Khi chương trình hay Unit dịch với {$L+}, chương trình gỡ rối nằm Turbo Pascal cho