Macro với nhiều tham số (parameters)

Một phần của tài liệu [Tài liệu lập trình C] - Chương 2 Những kỹ thuật nâng cao! (Trang 79)

C code: char string [ 5 ] ;

Macro với nhiều tham số (parameters)

Vừa rồi chúng ta đã biết làm cách nào để tạo ra một macro không dùng parameter, có nghĩa là không ghi gì vào trong parameter của nó. Tác dụng chính của dạng macro này, là có thể « rút ngắn » một đoạn code dài có khả năng lặp lại nhiều lần trong code source của bạn.

Trong tình huống như vậy, những macro này càng hiệu quả hơn khi chúng ta đặt vào chúng những parameter. Nó hoạt động tương tự như các function.

C Code:

#define NGUOI_TRUONG_THANH(tuoi) if (tuoi >= 18) \

printf ("Ban la nguoi truong thanh\n");

int main (int argc, char *argv[ ]) {

NGUOI_TRUONG_THANH(22)

return 0;

}

Console:

Ban la nguoi truong thanh

Cần viết thêm rằng tôi có thể thêm vào đó một else để hiển thị « Ban van chua truong thanh ». Hãy làm thử để tập luyện, không có chút khó khăn nào cả và đừng quên đặt thêm dấu antislash \ trước mỗi dòng mới

Tôi nghĩ bạn có thể hiểu ngay cách hoạt động của đoạn macro này:

C Code:

#define NGUOI_TRUONG_THANH(tuoi) if (tuoi >= 18) \

printf ("Ban la nguoi truong thanh\n");

Tôi đặt vào trong dấu ngoặc ( ) tên của biến số ta gọi là "tuoi". Trong tất cả đoạn code được thay thế, "tuoi" sẽ được thay thế bằng một số khi ta gọi lại macro (trong trường hợp này là 22). Và đoạn code trên sẽ tương tự như sau ngay thời điểm biên dịch chương trình:

Code C:

int main (int argc, char *argv[ ]) {

if (22 >= 18)

printf ("Ban la nguoi truong thanh\n");

return 0;

Đoạn code source trên đã được thay đổi lại, giá trị của biến số "tuoi" đã được đưa thẳng vào. Và chúng ta cũng có thể tạo một macro chứa nhiều parameters:

C Code:

#define NGUOI_TRUONG_THANH(tuoi, ten) if (tuoi >= 18) \

printf ("Ban la nguoi truong thanh %s\n", ten);

int main (int argc, char *argv[ ]) {

NGUOI_TRUONG_THANH(22, "Minh")

return 0;

}

Đó là phần lớn những gì ta có thể biết về macro.

Bình thường chúng ta không cần thiết phải sử dụng thường xuyên các macro. Nhưng ở một số trường hợp, trong các thư viện tương đối phức tạp như wxWidgets hay QT (thư viện dùng để tạo các cửa sổ bạn sẽ được học sau này) sử dụng rất nhiều các macro. Tôi thấy việc hướng dẫn bạn kể từ lúc này sẽ giúp bạn thích ứng dễ dàng hơn trong tương lai.

Một phần của tài liệu [Tài liệu lập trình C] - Chương 2 Những kỹ thuật nâng cao! (Trang 79)