Renaming Functions trong C Using #define
Trong C, đôi khi bạn muốn gọi một hàm bằng một tên khác mà không cần viết lại hàm gốc. Một cách đơn giản là dùng macro của preprocessor #define để tạo alias (bí danh) cho hàm.
Tránh khỏi lòng vòng, tôi sẽ lấy một ví dụ đơn giản cho vấn đề này
File math.h
#ifndef A_H
#define A_H
#include <stdio.h>
void add(int a, int b);
#endif
File math.c
#include "a.h"
void add(int a, int b)
{
printf("Sum = %d\n", a + b);
}
Ở đây tôi có định nghĩa một hàm để tính tổng 2 số và in ra màn hình kết quả.
File main.c
#include "Math.h"
#define sum add // Đổi tên hàm add() thành sum.
int main()
{
sum(1,2);
}
Macro ở đây
#define sum add
Điều này thông báo cho compiler rằng mọi chỗ gọi sum trong source code sẽ được thay thế bằng add trước khi biên dịch. Vì vậy, khi gọi sum(1,2), về thực chất chương trình sẽ gọi add(1,2).
Khi nào kỹ thuật này hữu ích?
- Tạo tên ngắn hoặc dễ nhớ hơn cho các hàm trong dự án lớn.
- Thích nghi với code cũ (legacy code) mà không sửa hàm gốc.
- Trong embedded, macro đôi khi được dùng để map các interrupt handler hoặc các hook của hệ thống sang tên hàm mà toolchain hoặc OS yêu cầu.
Tôi hy vọng với những kỹ thuật đơn giản này sẽ giúp ích cho mọi ng trong quá trình lm việc, hay đọc source code của các dự án mã nguồn mở.
All rights reserved