Tôi muốn tạo hai macro. Một trong số chúng sẽ mở rộng sang các nguyên mẫu hàm và nội dung hàm, còn cái còn lại sẽ chỉ mở rộng sang các nguyên mẫu hàm. Tôi đang nghĩ đến việc tạo ra những thứ sau:
#ifdef SOME_CONDITION
#define nguyên mẫu MY_MACRO(nguyên mẫu, nội dung);
#else
#define Nội dung nguyên mẫu MY_MACRO(nguyên mẫu, nội dung)
#endif
Như cách sử dụng ví dụ
MY_MACRO(int foo(int a, int b)
,
{
trả lại a + b;
}
)
Các macro này dường như hoạt động tốt. Bạn có nghĩ những macro này đủ an toàn để hoạt động như mong đợi với mọi loại mã C không? Hoặc bạn có thấy bất kỳ cạm bẫy nào không?
Cạm bẫy lớn đầu tiên, nó không hoạt động. Khi sử dụng macro thứ hai, nó tạo ra
int foo(int a, int b), { return a + b }
Đây không phải là một định nghĩa hàm hợp lệ. Để giải quyết vấn đề này bạn phải loại bỏ ,
.
Cạm bẫy thứ hai tôi thấy là các lập trình viên C thường không sử dụng các macro ưa thích như thế này. Điều này thực sự khó hiểu khi bạn đã quen đọc mã nguồn C.
Nếu bạn lo ngại về sự khác biệt giữa các khai báo nguyên mẫu và các định nghĩa hàm tương ứng, tôi khuyên bạn nên sử dụng các cờ hoặc công cụ biên dịch thích hợp. Kiểm tra câu hỏi và câu trả lời này,Làm cách nào để tìm hàm C mà không cần nguyên mẫu?
Tôi là một lập trình viên xuất sắc, rất giỏi!