Bài 3 6 Biên dịch có điều kiện

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 96 - 98)

/ *g ọi hàm g() biến b được cấp phát

Bài 3 6 Biên dịch có điều kiện

Tóm tắt nội dung:

Các chỉ thị biên dich có điều kiện #if, #ifdef, #ifndef dùng để hướng dẫn quá trình biên dịch có thể dịch hay bỏ qua một số câu lệnh theo một điều kiện chỉ ra.

Thời lượng: 1 tiết

Biên dich có điều kiện là điều khiển quá trình biên dịch sẽ thực hiện dịch hay bỏ qua một số câu lệnh trong chương trình theo một điều kiện nào đó. Xét một ví dụ sau:

#if !define(PI) #define PI 3.14 #endif

Trong đoạn chương trình chỉ thị #define chỉ được dịch khi việc kiểm tra hằng số PI chưa được định nghĩa. Điều đó đảm bảo tính logic trong khi dịch chương trình là hằng số PI chỉ cần định nghĩa khi nó chưa được định nghĩa trước đó.

#if <biểu thức hằng>

[#else] [#elif]

#endif

Chỉ thị #elif tương đương như #else kết hợp với #if. Một trong những cách sử dụng thông thường của #if là:

#ifdef <name> /* viết tắt của #if define(<name>) */ #ifndef <name> /* viết tắt của #if !define(<name>) */

Ví dụ:

/* kiểm tra xem có phải chương trình được dich bởi Turbo C */ #ifdef TURBOC

/* nếu đúng kích thước của int là 2 byte */ #define INT_SIZE 16 #define INT_SIZE 16

#else

/* kích thước của int trên Unix là 4 byte */ #define INT_SIZE 32

#endif

Trong nhiều chương trình khi được thiết kế để chỉ chạy trên một hệ điều hành nhất định, ta thường thêm một đoạn kiểm tra để dừng biên dịch nếu chương trình được dịch trên một hệ điều hành khác thiết kế.

Ví dụ:

#if SYSTEM != MSDOS

#error Program only run on MSDOS #endif

Biên dịch có điều kiện cịn giúp cho việc tạo một chương trình mà có thể dịch thành hai phiên bản: có gỡ rối (debug) và khơng có gỡ rối.

Ví dụ: #ifdef DEBUG printf("Debugging Version\n"); #endif int x, y; x = y *3; #ifdef DEBUG

printf("Debugging: Variables (x=%d, y=%d)\n",x,y); #endif

Khi muốn tạo phiên bản có debug thì ta chỉ cần thêm định nghĩa #define DEBUG ở ngay dịng đầu tiên của chương trình. Làm như vậy thì tất cả các lệnh in giá trị của các biến thay đổi từng bước sẽ có mặt trong chương trình giúp chúng ta lần bước được sự hoạt động của chương trình. Khi khơng cịn cần gỡ rối nữa thì ta chỉ việc bỏ #define DEBUG đi để biên dich có điều kiện loại bỏ tất cả các lệnh in giá trị lần bước trong chương trình

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 96 - 98)