1

我想用宏来扩展一个功能。所以我写了以下代码:

#define INIT ( T ) \
    struct T * init##T() { \
    struct T * obj  = ( struct T *)malloc( sizeof (struct T )); \
    return obj; \
} \

我使用以下命令调用宏:

INIT (mystruct);

错误 ::

错误:在 'struct'<br> 之前需要 '='、','、';'、'asm' 或 '__attribute__' 警告:数据定义没有类型或存储类 [默认启用]

我想基本上编写接受任何结构的通用宏,为该结构的对象分配空间并返回相同的值。

4

1 回答 1

7

6.10(1)中定义类函数宏的语法说:

# define identifier lparen identifier-list opt )替换列表换行

lparen: a ( 字符前面没有紧跟空格

宏名称和宏定义中的左括号之间不能有空格(但是在宏调用中它们之间可能有空格)。

因此,您不定义类似函数的宏,而是定义类似对象的宏,扩展为

( T ) struct T * ...

删除空格:

#define INIT( T ) \
    struct T * init##T() { \
    struct T * obj  = ( struct T *)malloc( sizeof (struct T )); \
    return obj; \
}

它会起作用。

于 2013-05-02T20:37:33.830 回答