Tôi đã cố gắng để thực hiện một macro hàm trong C prepends "DEBUG:", để lập luận, và vượt qua đối số của nó để printf:Lỗi khi định nghĩa một macro stringising với __VA_ARGS__
#define DBG(format, ...) printf("DEBUG: " #format "\n", __VA_ARGS__)
này mang lại cho tôi lỗi này trong gcc:
src/include/debug.h:4:70: error: expected expression before ‘)’ token
#define DBG(format, ...) printf("DEBUG: " #format "\n", __VA_ARGS__)
^
Giả sử, nó phải định dạng chuỗi và chuyển đối số biến của nó sang printf, nhưng cho đến nay tôi không thể vượt qua lỗi này.
EDIT
Sau khi từ bỏ stringising đối số, và nhấn đúp băm (##
) __VA_ARGS__
bây giờ tôi có lỗi này:
src/lib/cmdlineutils.c: In function ‘version’:
src/lib/cmdlineutils.c:56:17: warning: ISO C99 requires rest arguments to be used [enabled by default]
DBG("version()");
Tôi có nên đặt một dấu phẩy sau tranh luận?
DBG("version()",); // ?
Để tham khảo, DBG() bây giờ trông như thế này:
#define DBG(format, ...) printf("DEBUG: " format "\n", ##__VA_ARGS__)
trình cho tôi trên gcc, mà trình biên dịch bạn đã sử dụng không? Bạn có thể thử đặt khoảng cách giữa # và định dạng không? – Leeor
$ gcc --version: gcc (GCC) 4.8.1 20130725 (prerelease) –