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__' :数据定义没有类型或存储类[默认启用]
我想基本上编写接受任何结构的通用宏,为该结构的对象分配空间并返回相同的值.
6.10(1)中定义类函数宏的语法是:
# defineidentifier lparen identifier-list opt)replacement-list new-linelparen: 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)
它会起作用.