Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Bộ tiền xử lý (Preprocessors) trong C++


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