Một số mã kế thừa mà tôi đang làm việc có một macro trả về một danh sách được phân cách bằng dấu phẩy nhằm mục đích được sử dụng làm đối số hàm. Điều này là xấu, nhưng tệp cấu hình chứa nhiều tệp này và sẽ khó thay đổi ngay bây giờ.Tách đối số trong bộ tiền xử lý C++
#define XY1 0,0
#define XY2 1,7
...
void fun_point(x,y);
fun_point(XY1);
Tính năng này hoạt động miễn là chức năng được gọi. Tuy nhiên, khi cố gắng gọi một vĩ mô với các thông số, toàn bộ chuỗi được coi là một lập luận chứ không phải là phân chia theo dấu phẩy vào hai đối
#define MAC_POINT(x,y) (x+y)
MAC_POINT(XY1) #not expanded by preprocessor
Có một cách giải quyết cho vấn đề này mà không thay đổi định nghĩa XY?
/tôi lắc nắm tay tại mã cũ – icabod
Tôi đã tìm thấy một cuộc thảo luận hoặc vấn đề này trong hướng dẫn GCC: http://gcc.gnu.org/onlinedocs/cpp/Argument-Prescan.html#Argument-Prescan – Quantum7