【发布时间】:2020-11-13 14:18:04
【问题描述】:
我怎样才能 typedef 一个结构,但仍保持新类型命名空间在关键字 'struct' 下?
示例:
struct foo {
int x;
};
typedef struct foo struct bar;
int main(void) {
struct bar bar;
bar.x = 10;
return 0;
}
但这显然不起作用。 如果有人好奇,这里是错误:
main.c:5:20: error: two or more data types in declaration specifiers
typedef struct foo struct bar;
^
main.c:5:27: warning: useless storage class specifier in empty declaration
typedef struct foo struct bar;
^
main.c: In function 'main':
main.c:9:13: error: storage size of 'bar' isn't known
struct bar bar;
【问题讨论】:
-
你到底想让 typedef 做什么?只需将其删除。如果您删除 typedef 行,此代码将正常工作。
-
如果你还想使用
struct,那就不要typedef。 -
#define foo bar -
或者换句话说,为什么不直接使用
struct foo而不是struct bar?你想通过调用 bar 而不是 foo 来实现什么? -
@topoly 对,所以
typedef显然不适合你。唯一的其他选择是#define,您也拒绝了它。因此,您的问题的答案很简单,“不,您不能那样做。”