Các dòng bắt đầu bằng # được xử lý trước khi compile. 3 loại chính:
1. Biên dịch có điều kiện (Conditional Compilation)
#ifdef - #elif - #else - #endif. Kiểm tra macro đã định nghĩa.
#define MY_MACRO 10
#ifdef MACRO
cout<<"MACRO defined";
#elif MY_MACRO
cout<<"MY_MACRO defined: "<
2. Điều khiển dòng (Line Control)
#line số thay đổi số dòng hiện tại cho thông báo lỗi.
cout<<__LINE__; // 5
#line 200
cout<<"Hello"; // line 200
cout<<"World"; // line 201
cout<<__LINE__; // 202
3. Chỉ thị lỗi (Error Directive)
#error thông_điệp dừng compile và báo lỗi.
#ifdef MY_MACRO
cout<