Tiền xử lí

Tiền xử lí không phải là một phần của trình biên dịch (complier), nhưng nó là 1 bước riêng rẽ trong quá trình biên dịch. Tiền xử lí hướng dẫn trình biên dịch thực hiện các tiền xử lí trước khi biên dịch


Tất cả các tiền xử lí đều bắt đầu bằng dấu #. Dưới đây tôi sẽ giới thiệu một số tiền xử lí quan trọng nhất.
1. #define
– Định nghĩa hằng số. Macro sẽ được thay thế bằng giá trị định nghĩa
Ví dụ 1:

#define MAX_ARRAY 20
int Arr[MAX_ARRAY];

Câu lệnh này thay thế toàn bộ các hằng số MAX_ARRAY bằng 20. Bằng cách định nghĩa này sẽ giúp người đọc code sẽ dễ hiểu hơn rất nhiều.

– Định nghĩa hàm macro

#include <stdio.h>
#include <conio.h>

#define MAX(A, B) (A > B? A : B)

void main()
{
    int a = 3, b = -9;
    printf("\nmax(%d,%d) = %d", a, b, MAX(a, b));
    getch();
}

Kết quả:

max(3,-9) = 3

2. #include
Câu lệnh include dùng để include các file header, file C/C++,..
Có 2 cách viết câu lệnh #include:

#include "stdio.h"
#include <stdio.h>

2 câu lệnh này gọi thư viện “stdio” từ library.

3. #ifdef, #ifndef, #if, #endif, #else và #elif
Các tiền xử lí giúp phân chia source code thành nhiều phần khi điều kiện được thỏa mãn.

#ifndef TABLE_SIZE
#define TABLE_SIZE 100
#endif

int table[TABLE_SIZE];

Nếu TABLE_SIZE chưa được định nghĩa ở trước đó, #define TABLE_SIZE 100 sẽ được thực hiện.

– Tiền xử lí #if, #elif, #else gần giống với các câu lệnh kiểm tra điều kiện if/else. Cấu trúc #if, #elif, #else phải đi kèm với #endif.
– Tiền xử lí #undef sẽ remove macro nếu macro đã được định nghĩa trước đấy.

#if TABLE_SIZE>200
#undef TABLE_SIZE
#define TABLE_SIZE 200

#elif TABLE_SIZE<50
#undef TABLE_SIZE
#define TABLE_SIZE 50
#else
#undef TABLE_SIZE
#define TABLE_SIZE 100
#endif

int table[TABLE_SIZE];

Be the first to comment

Leave a Reply