Sử dụng chỉ thị tiền xử lý #undef để xác định trạng thái của một định danh là không được định nghĩa. Như chúng ta đã biết trình tiền xử lý sẽ thực hiện từ trên xuống dưới, do vậy một định danh đã được khai báo | Ngôn Ngữ Lập Trình C Không định nghĩa định danh Sử dụng chỉ thị tiền xử lý undef để xác định trạng thái của một định danh là không được định nghĩa. Như chúng ta đã biết trình tiền xử lý sẽ thực hiện từ trên xuống dưới do vậy một định danh đã được khai báo bên trên với chỉ thị define sẽ có hiệu quả đến khi một gọi câu lệnh undef định danh đó hay đến cuối chương trình define DEBUG if DEBUG Đoạn code này được biên dịch endif undef DEBUG if DEBUG Đoạn code này không được biên dịch endif if đầu tiên đúng do DEBUG được định nghĩa còn if thứ hai sai không được biên dịch vì DEBUG đã được định nghĩa lại là undef. Ngoài ra còn có chỉ thị elif và else cung cấp các chỉ dẫn phức tạp hơn. Chỉ dẫn elif cho phép sử dụng logic else-if . Ta có thể diễn giải một chỉ dẫn như sau Nếu DEBUG thì làm công việc 1 ngược lại nếu TEST thì làm công việc 2 nếu sai tất cả thì làm trường hợp 3 if DEBUG Đoạn code này được biên dịch nếu DEBUG được định nghĩa elif TEST Đoạn code này được biên dịch nếu DEBUG không được định nghĩa và TEST được định nghĩa else Đoạn code này được biên dịch nếu cả DEBUG và TEST không được định nghĩa. endif Trong ví dụ trên thì chỉ thị tiền xử lý if đầu tiên sẽ kiểm tra định danh DEBUG nếu định danh DEBUG đã được định nghĩa thì đoạn mã nguồn ở giữa if và elif sẽ được biên dịch và tất cả các phần còn lại cho đến chỉ thị endif đều không được biên dịch. Nếu DEBUG không được định nghĩa thì elif sẽ kiểm tra định danh TEST đoạn mã ở giữa elif và else sẽ được 81 Nền Tảng Ngôn Ngữ C Ngôn Ngữ Lập Trình C thực thi khi TEST được định nghĩa. Cuối cùng nếu cả hai DEBUG và TEST đều không được định nghĩa thì các đoạn mã nguồn giữa else và endif sẽ được biên dịch. Câu hỏi và trả lời Câu hỏi 1 Sự khác nhau giữa dựa trên thành phần Component-Based và hướng đối tượng Object- Oriented Trả lời 1 Phát triển dựa trên thành phần có thể được xem như là mở rộng của lập trình hướng đối tượng. Một thành phần là một khối mã nguồn riêng có thể thực hiện một nhiệm vụ đặc biệt. Lập trình dựa trên thành