Đị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
Trang 1ALIGN DATA
Cú pháp {$A+} hoặc {$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 bộ quá trình dịch
Ghi chú Định hướng $A chọn một trong hai cách bố trí các biến và
các hằng định kiểu với đơn vị theo byte hoặc theo word Trong trạng thái {$A+}, tất cả biến và hằng định kiểu có kích thước lớn hơn một byte đều được bố trí theo một đơn vị word Nếu cần, những byte vô ích sẽ được chèn vào giữa biến để thực hiện việc bố trí Điều này cũng có nghĩa là ta tốn một ít bộ nhớ để làm việc chèn thêm byte vô ích này Định hướng {$A+} không ảnh hưởng tới các biến có kích thước tính theo byte cũng như không ảnh hưởng tới các trường của bản ghi và các phần tử của mảng Một trường trong bản ghi sẽ được bố trí theo word chỉ nếu kích thước tổng cộng của tất cả các trường trước đó là chẵn Đối với mỗi phần tử của mảng để bố trí theo word kích thước của mỗi hần tử cũng phải là chẵn
Trong trạng thái {$A-}, không có một biện pháp bố trí nào được dùng Các biến và hằng định kiểu được thay thế một cách đơn giản tại các địa chỉ một cách liên tục bất chấp kích thước của chúng
Bất chấp trạng thái định huớng của $A, mỗi phần khai báo Var hoặc Const toàn cục đều luôn bắt đầu ở địa chỉ tính theo word Tương tự, chương trình dịch luôn giữ con trỏ Stack theo đơn vị word bằng cách bố trí thêm một byte không sử dụng trong một khuôn Stack của các thủ tục nếu có yêu cầu
BOOLEAN EVALUATION
Trang 2Cú pháp {$B+} hoặc {$B-}
Mặc định {$B+} tính biểu thức Boolean một cách đầy đủ
Kiểu Local
Ghi chú Định hướng $B chuyển trạng thái bật/tắt giữa hai mô hình
khác nhau của bộ mã sinh mã đối với các toán tử AND và
Trong trạng thái {$B+}, chương trình tạo ra mã để tính toán biểu thức Boolean một cách đầy đủ Điều này có nghĩa là mọi toán hạng của biểu thức Boolean của phép toán AND
và OR sẽ được bảo đảm là tính hết, thậm chí khi kết quả của toàn bộ biểu thức đã được biết, đã được tính xong Thí dụ với biểu thức:
(0 AND X) AND Y
luôn luôn bằng 0 với mọi X và Y Song với {$B+}, máy tính sẽ tính hết mọi 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 ra mã để tính nhanh biểu thức Boolean, nghĩa là quá trình tính biểu thức Boolean sẽ dừng lại ngay sau khi kết quả của biểu thức Boolean đã trở nên hiển nhiên, không cần phải tính thêm nữa
DEBUG IMFORMATION
Cú pháp {$D+} hoặc {$D-}
Mặc định {$D+} lập các thông tin gỡ rối
Kiểu Global
Ghi chú Định hướng dịch $D có thể thiết lập hoặc không thiết lập
các thông tin gỡ rối (debug) Thông tin này bao gồm bảng dòng đánh số cho mỗi thủ tục, nó ánh xạ địa chỉ mã với các số của dòng văn bản nguồn
Trang 3Đối với các Unit, thông tin gỡ rối (debug) được ghi ở trong tệp TPU cùng với các mã OBJ của unit Thông tin gỡ rối làm tăng nhanh kích thước của các tệp TPU và bố trí thêm cả những chỗ khi dịch các chương trình có dùng unit, song nó
không làm ảnh hưởng tới kích thước cũng như tốc độ của
chương trình đã được dịch ra để chạy
Khi một chương trình hay một unit được dịch với {SD+}, bộ gỡ rối nằm trong môi trường khép kín IDE cho phép bạn chạy chương trình từng bước một (step by step) và thiết lập điểm dừng trong modun đó
Các lựa chọn Debug đứng một mình (Option| Debugger) và tệp bản đồ (Option| Linker) tạo ra các thông tin về dòng một cách đầy đủ đối với một modun đã cho chỉ khi bạn đã dịch modun đó với {$D+)
Định hướng $D thường được sử dụng để liên kết với định hướng $L là định hướng cho phép hoặc không cho phép việc tạo ra các thông tin về kí hiệu cục bộ để gỡ rối
Nếu bạn muốn sử dụng Turbo Debuger để gỡ rối chương trình của bạn, hãy thiết lập Compiler| Destination to Disk, sau đó chọn Option| Debugger và lựa chọn Standalone
EMULATION
Cú pháp {$E+} hoặc {$E-}
Mặc định {$E+}
Kiểu Global
Ghi chú Đị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 và phỏng tạo bộ đồng sử lý số học 80x87 nếu như bộ đồng sử lý này không có trong máy
Khi bạn dịch một chương trình với {$N+, E+}, Turbo Pascal sẽ liên kết với một bộ phỏng tạo 80x87 đầy đủ Tệp EXE nhận được có thể được dùng trên mọi máy bất kể có bộ đồng xử lý trên máy hay không Nếu thấy co 80x87, Turbo Pascal sẽ sử dụng bộ đồng xử lý, còn nếu không thì thư viện thực sẽ phỏng tạo nó để chạy (lấy phần mềm thay cho phần cúng)
Trang 4Trong trạng thái {$N+, E-}, Turbo Pascal tạo ra một chương trình chỉ có thể chạy được nếu như có bộ đồng xử lý số học Chuyển mạch bật/tắt bộ phỏng tạo cho 80x87 không đem lại kết quả nếu nó được sử dụng trong unit, nghĩa là nó chỉ được áp dụng cho việc dịch của một chương trình chính Thêm nữa nếu chương trình và tất cả các unit của chương trình được dịch với trạng thái {$N-} thì thư viện thời gian thực cho 80x87 không được yêu cầu và việc chuyển mạch cho bộ phỏng tạo 80x87 sẽ bị bỏ qua
EXTENDED SYNTAX
Cú pháp {$X+} hoặc {$X-}
Mặc định {$X+}
Kiểu Global
Ghi chú Định hướng dịch $X chuyển bật/tắt giữa cú pháp mở rộng
của Turbo Pascal
Các câu lệnh hàm Trong chế độ {$X+}, các lời gọi hàm có
thể được thực hiện như một thủ tục, nghĩa là kết quả của một lời gọi hàm có thể được hủy bỏ Nói chung các tính toán được thực hiện bằng một hàm có thể được biểu diễn qua kết quả của nó, vì vậy việc hủy bỏ kết quả là một điều nhạy cảm nhỏ Tuy nhiên trong một số trường hợp, một hàm có thể thực hiện nhiều thao tác căn cứ vào tham số của nó, và một số trường hợp này lại không tạo ra những kết quả hữu ích Trong các trường hợp như thế, sự mở rộng {$X+} cho phép hàm được xử lý như là một thủ tục
Các xâu kết thúc bằng kí tự Null Một định hướng dịch
{$A+} cho phép sự hổ trợ sử dụng các xâu Null bằng cách kích hoạt các quy tắc đặc biệt để áp dụng cho kiểu Pchar FORCE FAR CALLS
Cú pháp {$F+} hoặc {$F-}
Trang 5Mặc định {$F-} tự động chọn cách gọi xa - gần
Kiểu Local
Ghi chú Định hướng dịch $F xác định kiểu gọi thủ tục và hàm sẽ
được áp dụng Các thủ tục và hàm được dịch trong trạng thái {$F+} luôn luôn sử dụng cách gọi xa (Far Call) Trong trạng thái {$F-},Turbo Pascal tự động chọn các mô hình thích hợp, nghĩa là gọi xa nếu thủ tục và hàm được khai báo trong phần Interface của một Unit, các trường hợp còn lại máy sẽ chọn cách gọi gần (Near Call)
GENERATE 80286 CODE
Cú pháp {$G+} hoặc {$G-}
Mặc định {$G-}
Kiểu Global
Ghi chú Đị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-}, chỉ có các lệnh cho
8086 được tạo ra và chương trình được dịch ra trong trường hợp này có thể chạy trên mọi họ máy 80 x 86 Bạn có thể viết chỉ dẫn {$G-} ở bất kì chỗ trống nào trong chương trình của bạn
Trong trạng thái {$G+}, chương trình dịch dùng thêm các cấu trúc lệnh của 80286 để cải thiện việc tạo mã lệnh, song chương trình được dịch ra trong trạng thái này sẽ không thể chạy với các bộ vi xử lý 8088 và 8086 Các lệnh bổ sung thêm được sử dụng trong trạng thái {$G+} bao gồm: Enter, Push, Leave tức thời, IMUL mở rộng và SHR, SHL mở rộng
INPUT/OUTPUT CHECKING
Cú pháp {$I+} hoặc {$I-}
Mặc định {$I+}
Trang 6Kiểu Local
Ghi chú Định hướng chuyển mạch bật/tắt cho phép tạo hoặc không
việc tạo mã tự động để kiểm tra kết quả một lời gọi thủ tục vào/ra Nếu thủ tục vào ra trả lại kết quả IOResult là khác 0 trong trạng thái {$I+}, chương trình sẽ 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 này sang tắt (off), thì máy sẽ không thông báo lỗi và bạn phải tự kiểm tra lỗi vào/ra bằng lời gọi IOResult
LINK OBJECT FILE
Cú pháp {$L FileName}
Kiểu Local
Ghi chú Định hướng tham số $L chỉ dẫn cho chương trình dịch liên
kết tệp FileName với chương trình hoặc Unit đang được dịch Định hướng $L được dùng để liên kết mã chương trình được viết bằng hợp ngữ cho chương trình con được miêu tả External Tệp được đặt tên phải là moat tệp OBJ Nếu FileName không chỉ rõ đường dẫn thì nó sẽ tìm kiếm trong thư mục hiện hành, sau đó là trong thư mục được chỉ rõ trong 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 chú Kí hiệu $L dùng để bật/tắt việc tạo ra thông tin kí hiệu cục
bộ Thông tin này bao gồm các tên và kiểu của tất cả các biến và hằng trong modun, nghĩa là các kí hiệu trong phần
Trang 7Implementation của modun đó, và các kí hiệu bên trong các thủ tục và hàm của modun đó
Với Unit, thông tin hiệu cục bộ được ghi vào tệp TPU với mã đối tượng của Unit Thông tin kí hiệu cục bộ làm tăng kích thước tệp TPU và tạo thêm chỗ trống khi dịch chương trình dùng Unit đó, song nó không ảnh hưởng tới kích thước cũng như tốc độ của chương trình chạy cuối cùng
Khi một chương trình hay Unit được dịch với {$L+}, chương trình gỡ rối nằm trong Turbo Pascal cho phép bạn xem, kiểm tra và thay đổi các biến cục bộ của modun Thêm nữa, có thể kiểm tra lời gọi những thủ tục và hàm của modun qua View| Call Stack
Việc gỡ rối độc lập (Option| Debugger) và lựa chọn tệp bản đồ (Map File) với Option| Linker sẽ tạo ra thông tin kí hiệu địa phương cho modun chỉ nếu nó được dịch trong trạng thái {$L+}
Định hướng $L thường được dùng với định hướng $D là định hướng thiết lập hay không thiết lập việc tạo ra bảng đánh số dòng để gở rối.Định hướng $L bị bỏ qua nếu chương trình dịch đang trong trạng thái {$D-}
NUMERIC COPROCESSOR
Cú pháp {$N+} hoặc {$N-}
Mặc định {$N-}
Kiểu Local
Ghi chú Định hướng $N bật/tắt giữa hai chế độ khác nhau của việc
sinh mã dấu chấm động của Turbo Pascal Trong trạng thái {SN-}, mã được tạo ra để thực hiện mọi tính toán bằng số thực trong phần mềm bằng cách gọi tới thư viện thời gian thực Còn trong trạng thái {$N+}, mã được tạo ra để tính toán mọi kiểu số thực bằng bộ đồng xử lý toán học 80x87 OPEN STRING PARAMETER
Trang 8Cú pháp {$P+} hoặc {$P-}
Mặc định {$P-}
Kiểu Local
Ghi chú Định hướng $P điều khiển ý nghĩa của tham biến được khai
báo với từ khóa String Trong trạng thái {$P-}, các tham biến được khai báo dùng từ khoá String là các tham biến bình thường nhưng trong trạng thái {$P+}, chúng là tham số String mở Không liên quan gì đến trạng thái thiết lập của
$P, tên OpenString luôn luôn được sử dụng để khai báo các tham số mở
OVERFLOW CHECKING
Cú pháp {$Q+} hoặc {$Q-}
Mặc định {$Q-}
Kiểu Local
Ghi chú Định hướng $Q điều khiển việc tạo mã để kiểm tra tràn
Trong trạng thái {$Q+}, một số lệnh toán học với số nguyên (+, -, *, /, Abs, Sqr, Succ, Pred) được kiểm tra xem có tràn không Mã của mỗi lệnh số nguyên được thêm một phần để kiểm tra xem kết quả có nằm trong khoảng giá trị cho phép Nếu gặp hiện tượng tràn nó sẽ dừng chương trình và báo lỗi {$Q+} không ảnh hưởng tới thủ tục chuẩn Dec và Inc
Những thủ tục này không bao giờ được kiểm tra tràn
Chuyển mạch $Q thường được dùng với chuyển mạch $R là chuyển mạch thiết lập hoặc không thiết lập việc tạo ra mã kiểm tra khoảng giá trị Việc kiểm tra tràn sẽ làm cho chương trình của bạn chạy chậm hơn và kích thước chương trình lớn hơn một chút Do đó chỉ nên dùng {$Q+} cho việc gỡ rối
OVERLAY CODE GENERATION
Trang 9Cú pháp {$O+} hoặc {$O-}
Mặc định {$O-}
Kiểu Local
Ghi chú Định hướng $O dùng để bật/tắt việc tạo mã phủ Turbo
Pascal cho phép một Unit chỉ được phủ nếu nó đã được dịch với {$P+} Trong trạng thái này, bộ phận tạo mã có một số biện pháp ngăn ngừa đặc biệt khi chuyển tham số String và hằng tập từ một thủ tục hay hàm được phủ tới một thủ tục/hàm khác
Sử dụng {$O+} trong một Unit không bắt buộc bạn phải phủ Unit đó Nó chỉ hướng dẫn Turbo Pascal bảo đảm chắc rằng Unit đó có thể được phủ nếu bạn muốn Nếu bạn muốn phát triển các Unit để sau này cho các ứng dụng có phủ cũng như không phủ, việc dịch chúng với $O+ sẽ đảm bảo với bạn là bạn có thể tạo ra cả 2 phiên bản trong cùng một chương trình nguồn
Định hướng chương trình dịch {$O+} thường được dùng với định hướng {$F+} để thỏa mãn việc quản lý bao phủ cho những yêu cầu gọi xa
RANGE CHECKING
Cú pháp {$R+} hoặc {$R-}
Mặc định {$R-}
Kiểu Local
Ghi chú Định hướng $R dùng để bật/tắt việc tạo mã kiểm tra dải giá
trị, nghĩa là xem giá trị đó có nằm trong khoảng cho phép hay không Trong trạng thái {$R+}, tất cả các biểu thức mảng và chỉ số chuỗi đều được thẩm tra dải giá trị và tất cả các phép gán cho các biến vô hướng và biến khoảng con cũng đều được kiểm tra dải giá trị Nếu việc kiểm tra thấy sai, nó sẽ ngừng chương trình lại và thông báo lỗi
Trang 10Nếu $R được bất, mọi lời gọi tới các hành vi ảo đều được kiểm tra đối với tình trạng khởi tạo của cá thể gọi Nếu cá thể gọi không được khởi tạo bằng Contructor của nó, máy sẽ báo lỗi kiểm tra giá trị
Bật kiểm tra dải giá trị và kiểm tra lời gọi hành vi ảo sẽ làm chậm chương trình của bạn và làm tăng kích thước của chương trình, vì vậy chỉ dùng {$R+} để gỡ rối
STACK-OVERFLOW CHECKING
Cú pháp {$S+} hoặc {$S-}
Mặc định {$S+}
Kiểu Local
Ghi chú Định hướng $S thiết lập hay không thiết lập việc tạo ra mã
kiểm tra tràn của Stack Trong trạng thái {$S+}, chương trình tạo ra mã ở đầu mỗi thủ tục hay hàm để kiểm tra xem không gian Stack có đủ để lưu trữ biến địa phương và các việc lưu trữ tạm thời khác Khi không đủ không gian Stack thì một lời gọi tới hàm hay thủ tục được dịch với {$S+} sẽ dẫn đến dừng chương trình và xuất hiện thông báo lỗi Trong trạng thái {$S-}, một lời gọi như vậy sẽ làm cho hệ thống bị hỏng
SYMBO REFERENCE
Cú pháp {$Y+} hoặc {$Y-}
Mặc định {$Y+}
Kiểu Local
Ghi chú Định hướng $Y dùng để bật/tắt việc tạo ra thông tin tham
khảo các kí hiệu Thông tin này bao gồm những bảng cung cấp số dòng của tất cả các khai báo, các kí hiệu và các tham khảo tới những kí hiệu trong một modun
Trang 11Đối với Unit, thông tin tham khảo kí hiệu được ghi trong tệp TPU với mã đối tượng của Unit Thông tin tham khảo kí hiệu làm tăng kích thước của tệp TPU nhưng không ảnh hưởng tới tốc độ và kích thước của chương trình được dịch ra để chạy
Khi một chương trình hay một Unit được dịch với {$Y+}, bộ xem và duyệt của Turbo Pascal có thể hiển thị định nghĩa kí hiệu và thông tin tham khảo cho modun đó
$Y thường được dùng cùng với $D và$L, là các định hướng điều khiển việc tạo ra các thông tin gỡ rối và thông tin kí hiệu cục bộ Định hướng $Y không có tác dụng trừ khi cả hai
$D và $L được thiết lập
TYPE-CHECKING POINTERS
Cú pháp {$T+} hoặc {$T-}
Mặc định {$T-}
Kiểu Global
Ghi chú Định hướng $T điều khiển các kiểu dữ liệu con trỏ được tạo
ra từ toán tử @ Trong trạng thái {$T-}, kết quả của toán tử
@ luôn là con trỏ Nói cách khác kết quả là kiểu con trỏ không định kiểu sẽ tương thích với mọi kiểu con trỏ khác.Khi
@ được áp dụng cho một biến trong trạng thái {$T+}, kiểu của kết quả là ^T trong đó T là kiểu của biến Nói cách khác, kết quả là một kiểu chỉ tương thích với các con trỏ khác trỏ tới kiểu của biến
VAR-STRING CHECKING
Cú pháp {$V+} hoặc {$V-}
Mặc định {$V+}
Kiểu Local