[C/C++] Chỉ thị tiền xử lý – Preprocessor directives

Mở đầu bài viết này, mình sẽ cho các bạn xem một bức ảnh và các bạn hãy dành khoảng 1 phút đọc chương trình sau, hãy xem xét thật kỹ để nhận ra sự khác biệt…

I LOVE YOU

Nội dung
1. #define
2. Toán tử # và ##

Bây giờ các bạn nhận ra sự khác biệt chưa ??? Ban đầu khi đưa bức ảnh này ra mọi người chỉ để ý đến nội dung của nó (về tình yêu gì gì đó @@) hoặc khá hơn một tẹo là bắt lỗi được mình viết từ “ieu” sai chính tả (đúng phải là “yeu”) =)). Rất mong là các bạn không như các bạn ấy, mà nếu thế cũng không sao, quan trọng là có nhận ra sự khác biệt thực sự (không phải các điều trên)? Nếu nhận ra rồi thì rất tốt, còn nếu vẫn chưa nhận ra thì hãy để ý, … chương trình không có hàm main.

Trước tiên mình sẽ nói về #define

Hiểu nôm na đơn giản thì nó dùng để định nghĩa hằng. Ví dụ bạn có:

#define x 100;
#define s "nguyenvanquan7826"

Khi chương trình chạy, các dòng này sẽ được xử lý trước tiên và trong toàn bộ chương trình giá trị của chúng sẽ được thay bằng giá trị đã định nghĩa và không thể thay đổi. Trong ví dụ này x nhận giá trị là 100, s nhận giá trị là xâu “nguyenvanquan7826”.

Chúng ta cũng có thể sử dụng nó để định nghĩa một chức năng nào đó. Ví đụ định nghĩa tìm giá trị lớn nhất giữa 2 số.

#define getmax(a,b) a>b?a:b

Quan sát chuơng trình chạy, nó hoàn toàn thực hiện đúng.

/*
C/C++ program - code by nguyenvanquan7826
Home
*/ #include <iostream> #define getmax(a,b) a>b?a:b using namespace std; int main() { int m = getmax(5, 7); cout << m << endl; return 0; }


Toán tử # và toán tử ##

Toán thử # khi được sử dụng sẽ thay thế hàm được định nghĩa bằng chính chuỗi là tham số trong hàm.

#define str(x) #x
cout << str(nguyenvanquan7826);

Tương đương với lệnh

cout << "nguyenvanquan7826";

Toán tử ## sẽ nối 2 đối số mà không để lại khoảng trống giữa chúng.

define glue(a,b) a ## b
glue(c,out) << "nguyenvanquan7826";

Tương đương với lệnh

cout << "nguyenvanquan7826";

Bây giờ bạn thử giải thích đoạn chương trình ban đầu nhé.

Bài viết tham khảo tại: cplusplus.com