我想用宏来扩展一个功能。所以我写了下面的代码:
#define INIT ( T ) \
struct T * init##T() { \
struct T * obj = ( struct T *)malloc( sizeof (struct T )); \
return obj; \
} \
我使用以下内容调用宏:
INIT (mystruct);
错误::
错误:在'struct'之前预期'=',',',';','asm'或'__attribute__' 警告:数据定义没有类型或存储类[默认情况下启用]
我想基本上编写接受任何结构的通用宏,为该结构的对象分配空间并返回相同的值。
答案 0 :(得分:7)
6.10(1)中类似函数宏定义的语法是:
# define
标识符lparen标识符列表 opt ) replacement-list new-linelparen: a(字符不会立即以空格开头
宏定义中的宏名称和左括号之间不能有空格(但在宏调用中它们之间可能有空格)。
因此,您不定义类似函数的宏,而是定义类似对象的宏,扩展为
( T ) struct T * ...
删除空格:
#define INIT( T ) \
struct T * init##T() { \
struct T * obj = ( struct T *)malloc( sizeof (struct T )); \
return obj; \
}
它会起作用。