在VC ++中将结构声明作为函数参数

时间:2014-10-05 20:58:44

标签: visual-c++ compiler-errors asn.1

我正在使用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函数的结构可能会解决这个问题,但我不确定如何为这些匿名结构做到这一点。

0 个答案:

没有答案