Các chỉ thị tiền xử lý (preprocessor directives) là các chỉ dẫn cho trình biên dịch xử lý thông tin trước khi biên dịch thực sự bắt đầu.
Tất cả chỉ thị tiền xử lý bắt đầu bằng #, và chỉ có ký tự khoảng trắng có thể xuất hiện trước chỉ thị trên một dòng. Chúng không phải là câu lệnh C++, nên không kết thúc bằng dấu chấm phẩy (;).
Bạn đã thấy chỉ thị #include trong các ví dụ. Macro này dùng để đưa tệp tiêu đề vào tệp nguồn.
C++ hỗ trợ nhiều chỉ thị tiền xử lý như #include, #define, #if, #else, #line, v.v. Dưới đây là các chỉ thị quan trọng:
Chỉ thị #define
#define tạo hằng số ký hiệu. Hằng số ký hiệu gọi là macro, dạng chung:
#define tên_macro văn_bản_thay_thế
Ví dụ mã
#include <iostream>
using namespace std;
#define PI 3.14159
int main() {
cout << "Value of PI :" << PI << endl;
return 0;
}
Kết quả
Value of PI :3.14159
Biên dịch có điều kiện (Conditional Compilation)
Một số chỉ thị dùng để biên dịch chọn lọc phần mã nguồn. Quá trình này gọi là biên dịch có điều kiện.
Cấu trúc tiền xử lý có điều kiện giống như cấu trúc chọn 'if'. Ví dụ:
#ifndef NULL
#define NULL 0
#endif
Có thể biên dịch chương trình cho mục đích gỡ lỗi. Có thể bật/tắt gỡ lỗi bằng một macro:
#ifdef DEBUG
cerr << "Variable x = " << x << endl;
#endif
Điều này khiến câu lệnh cerr được biên dịch nếu hằng số DEBUG đã được định nghĩa trước #ifdef DEBUG. Có thể dùng #if 0 để comment một đoạn mã:
#if 0
mã bị ngăn chặn biên dịch
#endif
Ví dụ mã
#include <iostream>
using namespace std;
#define DEBUG
#define MIN(a,b) (((a)<(b)) ? a : b)
int main() {
int i, j;
i = 100;
j = 30;
#ifdef DEBUG
cerr << "Trace: Inside main function" << endl;
#endif
#if 0
/* This is commented part */
cout << MKSTR(HELLO C++) << endl;
#endif
cout << "The minimum is " << MIN(i, j) << endl;
#ifdef DEBUG
cerr << "Trace: Coming out of main function" << endl;
#endif
return 0;
}
Kết quả
Trace: Inside main function The minimum is 30 Trace: Coming out of main function