gpt4 book ai didi

c - 外部结构声明,但结构定义就在上面

转载 作者:行者123 更新时间:2023-12-04 07:40:38 25 4
gpt4 key购买 nike

我在这里仔细检查了所有类似的问题,我真的希望不要重复。
我对 stdio.h 中的以下摘录很感兴趣:

typedef struct _iobuf {
/* Members here omitted ... */
} FILE;
extern FILE _iob[20];
我们使用 struct 语法定义了一个名为 FILE 的新类型。紧接着,我们声明了一个 FILE 类型的外部变量 _iob。因此,这个变量必须来自另一个地方。
但是,既然 FILE 的定义就在这个文件中,那怎么可能呢?我只看到两种可能性。
第一个是有类似的东西:
#include <stdio.h>
FILE _iob[20] = /* definition */
第二个是有另一个源文件,其中结构被复制粘贴并声明了变量,我想我们可以省略一个非常糟糕的做法。
由于我是自学者,我很高兴收到我的理解确认。谢谢!

最佳答案

任何一个:

  • 在库源代码文件的某处,有你描述的文本,包含 <stdio.h>后跟 FILE _iob[20] 的定义, 或
  • 在库源代码文件的某处,有一个 _iob 的定义用标准 C 以外的编程语言编写。

  • 后者可能是汇编语言、带有扩展的非标准 C 或其他语言。 C 的实现不需要仅使用 C 源代码来定义自身。
    一般来说,定义一个对象的源文件也包含它自己的头是一种很好的做法。头文件的主要目的是将相关源文件中定义的内容告诉其他源文件。但是在源文件中包含头文件还有另一个目的:编译器将看到头文件中的声明和源文件中的定义,如果它们不兼容,将发出错误消息。因此,这提供了在构建库时捕获拼写错误或其他错误的检查。

    关于c - 外部结构声明,但结构定义就在上面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67490933/

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