我正在使用asn1c生成C ++编码器/解码器代码。在生成的代码中存在一个问题(这是一个巨大的代码)阻止它在VC ++上编译,我试图在这里简化:
生成的代码中有A_SET_OF
个宏定义为:
#define A_SET_OF(type) \
struct { \
type **array; \
int count; /* Meaningful size */ \
int size; /* Allocated size */ \
void (*free)(type *); \
}
此宏稍后用于代码的几个部分。例如:
A_SET_OF(struct MyStructure {
long myNumber;
char* myPointer;
} ) myList;
我在这些部分上遇到C2226: syntax error : unexpected type
错误。为了找到导致问题的实际原因,我替换了实际的宏定义:
struct {
struct MyStructure { long myNumber; char* myPointer; } **array;
int count; /* Meaningful size */
int size; /* Allocated size */
void (*free)(struct MyStructure { long myNumber; char* myPointer; } *);
} myList;
错误是由void(*free)
行引起的。显然,将struct声明作为函数参数是VC ++不支持的非标准特性(并且gcc可能支持asn1c主要目标Linux)。
我正在寻找解决此问题的方法,最好修复A_SET_OF宏定义,因为有很多引用它。 typedef
传递给free
函数的结构可能会解决这个问题,但我不确定如何为这些匿名结构做到这一点。