Trong giai đoạn tiền xử lý (preprocessing) của một trình biên dịch, chỉ thị #define TÊN GIÁ_TRỊ định nghĩa một macro đối tượng (object-like macro): mọi lần xuất hiện của token TÊN trong mã nguồn sau đó sẽ được thay thế bởi token GIÁ_TRỊ.
Cho n định nghĩa macro và m dòng mã nguồn (đã được tách sẵn thành các token cách nhau bởi đúng một khoảng trắng), hãy thực hiện phép thay thế một lượt duy nhất (không thay thế đệ quy trên chính giá trị vừa thay): với mỗi token trong mã nguồn, nếu token đó trùng khớp hoàn toàn (so sánh chuỗi, phân biệt hoa thường) với tên một macro đã định nghĩa, thay nó bằng giá trị của macro; ngược lại giữ nguyên token.
Nếu một tên macro được định nghĩa lại (#define xuất hiện nhiều lần với cùng tên), định nghĩa xuất hiện sau sẽ ghi đè định nghĩa trước.
Ví dụ: Với macro MAX 100 và dòng code if x > MAX then y = MAX, kết quả là if x > 100 then y = 100.
TÊN GIÁ_TRỊ (TÊN, GIÁ_TRỊ là chuỗi không rỗng, không chứa khoảng trắng).In ra m dòng, dòng thứ i là dòng mã nguồn thứ i sau khi thay thế macro (một lượt), các token cách nhau bởi đúng một khoảng trắng. Dòng rỗng in ra một dòng trống.
Ví dụ:
Đầu vào:
3 2
MAX 100
MIN 0
PI 3
if x > MAX then y = MIN
z = PI * PI
Đầu ra:
if x > 100 then y = 0
z = 3 * 3
Đầu vào:
2 1
A 1
A 2
val = A
Đầu ra:
val = 2
Đang tải editor...