GCC than phiền nếu tôi làm điều này:Tôi có thể định nghĩa các macro tiền xử lý variadic C với __VA_ARGS ở giữa thay vì kết thúc không?
#define M(obj,met, ..., contents) obj##_##met(const void * self, __VA_ARGS__) { \
contents \
}
Cho tôi những 2 lý do:
error: missing ')' in macro parameter list
warning: __VA_ARGS__ can only appear in the expansion of a C99 variadic macro
Rõ ràng, C99 - phong cách macro variadic mong đợi những đóng ngoặc ngay sau khi lược, hiệu quả đòi hỏi rằng variadic danh sách là đối số cuối cùng của macro. Tôi cần nó ở giữa để tạo ra ký pháp viết tắt của tôi được mô tả trong macro trên. GCC có hỗ trợ tính năng này hay không, sử dụng kiểu macro Variadic khác (không phải C99)? Tôi có thể mô phỏng nó làm việc này một cách khác không? Tôi không muốn danh sách variadic ở cuối, nó sẽ làm cho ký hiệu của tôi khó hiểu. Và tôi chỉ có thể sử dụng GCC.
* Tôi không muốn danh sách variadic ở cuối, nó sẽ làm cho ký hiệu của tôi khó hiểu. Và tôi chỉ có thể sử dụng GCC. –
Xem [Boost.Preprocessor] (http://www.boost.org/doc/libs/1_43_0/libs/preprocessor/doc/index.html). Tôi gần như chắc chắn bạn có thể làm điều đó miễn là bạn ngừng cố gắng xác định 'nội dung' như một đối số riêng biệt - bạn sử dụng một phần của công cụ tiền xử lý để xác định đối số cuối cùng của các đối số biến. Tất nhiên, định nghĩa phức tạp hơn một chút. –