CL编译器的备用(args ...)标记

时间:2016-11-20 08:41:03

标签: c

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;

Example for the GCC compiler

1 个答案:

答案 0 :(得分:1)

看看Variadic macros

  

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时传递它)。

示例:http://rextester.com/GYVS61567