Preprocessor: là một công cụ thay thế văn bản và nó chỉ thị trình biên dịch cần thực hiện trước khi biên dịch.
- Thay thế macro tiền xử lý.
- #define cho phép bạn đặt tên cho một hằng số nguyên hay hằng số thực, hoặc dùng để định nghĩa một hàm.
- Chèn một header cụ thể từ một file khác.
- Hủy định nghĩa macro tiền xử lý.
- Trả về true nếu macro được định nghĩa.
- Trả về true nếu macro không được định nghĩa.
- Kiểm tra nếu một điều kiện thời gian biên dịch là true.
- Phương án thay thế theo sau #if.
- #else và #if trong một câu lệnh.
- Kết thúc tiền xử lý có điều kiện.
- In thông báo lỗi trên stderr.
- Đưa ra các lệnh đặc biệt cho trình biên dịch, sử dụng một phương thức được chuẩn hóa.
- Ngày hiện tại có định dạng "MMM DD YYYY".
- Thời gian hiện tại có định dạng "HH:MM:SS".
- Chứa tên của file hiện tại có kiểu chuỗi.
- Chứa số dòng hiện tại dưới dạng hằng số thập phân.
- Được định nghĩa là 1 khi trình biên dịch tuân thủ tiêu chuẩn ANSI.
Tips for Segment Fault: https://web.mit.edu/10.001/Web/Tips/tips_on_segmentation.html
- Toán tử stringize hoặc number-sign ('#'), khi được sử dụng trong định nghĩa macro, chuyển đổi một tham số macro thành hằng số chuỗi. Toán tử này chỉ có thể được sử dụng trong một macro có một đối số hoặc danh sách tham số được chỉ định.
- Toán tử Token Pasting (##) trong một macro #define kết hợp hai đối số. Nó cho phép hai thẻ riêng biệt trong định nghĩa macro được kết hợp thành một mã thông báo duy nhất.
- Toán tử tiền xử lý defined được sử dụng trong biểu thức hằng số để xác định một identifier được định nghĩa sử dụng #define. Nếu identifier được chỉ định là defined, gía trị là true (non-zero). Nếu không được định nghĩa giá trị là false (zero).
- VD: #define square(x) ((x) * (x))
- Sử dụng lệnh #define để định nghĩa macro tham số. Danh sách đối số được đặt trong dấu ngoặc đơn và phải ngay lập tức ngay sau tên macro. Không được phép sử dụng dấu cách giữa tên macro và dấu ngoặc đơn mở.
- Typedef được giới hạn chỉ cung cấp các tên viết tắt cho các kiểu, trong khi đó #define có thể được sử dụng để định nghĩa tên hiệu cho cả các giá trị, như bạn có thể định nghĩa pi là 3.14, ….
- Sự phiên dịch typedef được thực hiện bởi bộ biên dịch, trong khi lệnh #define được xử lý bởi bộ tiền xử lý.
- ....