首先是令我困惑的代码:
typedef struct Object {
typedef int MyInt;
void (*destructor)(Object *);
void *(*constructor)(struct Object *);
} Object;
为什么编译器阻止我在结构体中定义 typedef?
C语言中的每一个声明struct
必须声明一个数据字段(可能未命名)。这意味着可以在 a 中定义类型struct
在 C 中,只要将新类型声明作为数据字段声明的一部分嵌入即可。例如
struct Outer {
struct Inner {
int i;
} field;
};
struct Outer a;
a.field.i = 42;
在上面的例子中输入struct Inner
在类型内部声明struct Outer
。然而,“嵌套”struct Inner
类型声明没有以任何方式在内部本地化struct Outer
。它仍然具有文件作用域,因为 C 语言没有这样的东西struct
范围。这意味着您仍然可以使用struct Inner
作为同一文件范围的成员
struct Inner b;
b.i = 42;
同时,这个技巧不适用于typedef
声明,自typedef
声明不声明数据字段。
请注意,本着 C 语言的精神,即使您的typedef
声明在某种程度上是合法的,它仍然会声明一个 typedef 名称MojInt
与文件范围。 IE。它的行为与你放置你的typedef
之前的声明struct
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)