CL编译器的替代标记(args ...)是什么?
#define DECLARE_C_ARRAY(__type, __name, __page, __args...) \
enum { __name##_page_size = __page }; \
typedef __type __name##_element_t; \
typedef C_ARRAY_SIZE_TYPE __name##_count_t; \
typedef struct __name##_t {\
volatile __name##_count_t count;\
volatile __name##_count_t size;\
__name##_element_t * e;\
__args ;\
} __name##_t, *__name##_p;
答案 0 :(得分:1)
Variadic宏是C99的新功能。 GNU CPP支持他们 很长一段时间,但只有一个命名变量参数('args ...', 不是'...'和 __ VA_ARGS __ )。如果您担心可移植性 在以前的GCC版本中,您应该只使用命名变量 参数。另一方面,如果你担心可移植性 其他符合C99的实现,你应该只使用 的 __ VA_ARGS __ 强>
更改
#define DECLARE_C_ARRAY(__type, __name, __page, __args...) \
到
#define DECLARE_C_ARRAY(__type, __name, __page, ...) \
和
__args ;\
到
__VA_ARGS__;\
不幸的是,如果我们排除了args
,这种方法不起作用
在这种情况下,请删除分号__VA_ARGS__\
(但在使用args时传递它)。