gpt4 book ai didi

c - C 结构中的 Typedef

转载 作者:太空狗 更新时间:2023-10-29 14:52:30 29 4
gpt4 key购买 nike

首先是让我感到困惑的代码:

typedef struct Object {
typedef int MyInt;
void (*destructor)(Object *);
void *(*constructor)(struct Object *);
} Object;

为什么编译器阻止我在结构中定义 typedef?

最佳答案

在 C 语言中,struct 中的每个声明都必须声明一个数据字段(可能未命名)。这意味着可以在 C 中的 struct 中定义类型,只要将新类型声明作为数据字段声明的一部分嵌入即可。例如

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 之前的行为完全相同。

关于c - C 结构中的 Typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20336244/

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