C宏给出编译时错误

She*_*fer 1 c macros c-preprocessor

我想用宏来扩展一个函数.所以我写了下面的代码:

#define INIT ( T ) \
    struct T * init##T() { \
    struct T * obj  = ( struct T *)malloc( sizeof (struct T )); \
    return obj; \
} \
Run Code Online (Sandbox Code Playgroud)

我使用以下方法调用宏:

INIT (mystruct);
Run Code Online (Sandbox Code Playgroud)

错误::

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

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

Dan*_*her 7

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

# define identifier lparen identifier-list opt)replacement-list new-line

lparen: a(字符之前没有白色空格

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

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

( T ) struct T * ...
Run Code Online (Sandbox Code Playgroud)

删除空格:

#define INIT( T ) \
    struct T * init##T() { \
    struct T * obj  = ( struct T *)malloc( sizeof (struct T )); \
    return obj; \
}
Run Code Online (Sandbox Code Playgroud)

它会起作用.