【发布时间】:2021-05-11 16:36:39
【问题描述】:
我在这里仔细检查了所有类似的问题,我真的希望不要重复。 我对 stdio.h 的以下摘录很感兴趣:
typedef struct _iobuf {
/* Members here omitted ... */
} FILE;
extern FILE _iob[20];
我们使用 struct 语法定义了一个名为 FILE 的新类型。紧接着,我们声明一个 FILE 类型的 extern 变量 _iob。因此,这个变量必须来自另一个地方。 但是,既然 FILE 的定义就在这个文件里,那怎么可能呢?我只看到两种可能性。 第一个是有类似的东西:
#include <stdio.h>
FILE _iob[20] = /* definition */
第二个是复制粘贴结构并声明变量的另一个源文件,我想我们可以省略一个非常糟糕的做法。
由于我是自学者,我很高兴收到确认我的理解。谢谢!
【问题讨论】:
-
typedef定义了数据类型FILE的布局。extern表示代码有其中一个可供使用,但它的位置在其他地方定义。 -
是的,我明白你的意思。但不知何故,这样说听起来很“奇怪”:“我们只在这里定义一个类型,然后定义一个可以来自另一个来源的这种类型的变量”。我的意思是,那个来源怎么知道类型定义?我很高兴我问了,因为它有助于澄清一些 C 语法。祝你有美好的一天。
-
typedef可以在其他地方重复而不会出现问题。是的,只在一个头文件中定义并在任何地方都包含它是正常的,但这不是必需的。 -
但是'typedef'的重复不是一个非常糟糕的做法吗?关于剩余的评论,谢谢,非常清楚。
-
是的,对同一事物有多个定义绝不是一个好主意。