gpt4 book ai didi

C宏给出编译时错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:00 25 4
gpt4 key购买 nike

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

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

我使用以下方法调用宏:

INIT (mystruct);

错误::

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘struct’
warning: data definition has no type or storage class [enabled by default]

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

最佳答案

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

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

lparen: a ( character not immediately preceded by white-space

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

因此你没有定义一个类似函数的宏,而是一个类似对象的宏,展开为

( T ) struct T * ...

删除空格:

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

它会起作用。

关于C宏给出编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16346829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com