c - 外部结构声明,但结构定义就在上面
问题描述
我在这里仔细检查了所有类似的问题,我真的希望不要重复。我对 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 源代码来定义自身。
通常,定义对象的源文件也包含其自己的标头是一种很好的做法。头文件的主要目的是告诉其他源文件相关源文件中定义的内容。但是在源文件中包含头文件还有另一个目的:编译器将同时看到头文件中的声明和源文件中的定义,如果它们不兼容,则会发出错误消息。因此,这提供了在构建库时捕获拼写错误或其他错误的检查。
推荐阅读
- unity3d - Unity:双击按钮时如何制作定向破折号
- c# - 如何在布局中包装视图
在 Xamarin 表单中使用 DataTemplate 的控件 - amazon-web-services - Amazon EC2 和 Amazon Redshift 之间的关系
- bash - 为什么我的文本文件显示我的所有字段都等于只有一个字段?
- mysql - Laravel 测试功能以查看数据库中的任何更改
- python - 如何在没有for循环的情况下通过多个索引获取/设置numpy矩阵中的元素?
- android - `未解决的参考:新 Flutter 项目上的 android`
- javascript - 是否可以在 SVG 中使用 Snap?
- html - 如何在离子的get方法中通过id添加特定图像
- dart - Flutter:如何验证get请求返回html的api