外部结构声明,但结构定义就在上面
An external struct declaration, but the struct definition is just above
我在这里仔细检查了所有类似的问题,我真的希望不要重复。
我对 stdio.h 中的以下摘录很感兴趣:
typedef struct _iobuf {
/* Members here omitted ... */
} FILE;
extern FILE _iob[20];
我们使用结构语法定义了一个名为 FILE 的新类型。紧接着,我们声明了一个extern FILE 类型的变量_iob。所以,这个变量一定是从别的地方来的。
但是,既然FILE的定义都在这个文件中,那怎么可能呢?我只看到两种可能性。
第一个是像这样的东西:
#include <stdio.h>
FILE _iob[20] = /* definition */
第二个是有另一个源文件,其中复制粘贴了结构并声明了变量,我想这是一个非常糟糕的做法,我们可以省略。
因为我是一个自学者,我会很高兴收到我的确认understanding.Thanks!
或者:
- 在库源代码文件的某处,有您描述的文本,包含
<stdio.h>
后跟 FILE _iob[20]
的定义,或
- 在库源代码文件的某处,有一个
_iob
的定义是用标准 C 以外的编程语言编写的。
后者可能是汇编语言,non-standard C 扩展,或其他语言。 C 的实现不需要仅使用 C 源代码来定义自身。
一般来说,定义 object 的源文件最好也包含它自己的 header。 header 文件的主要目的是告诉其他源文件有关关联源文件中定义的内容。但是在源文件中包含 header 文件还有另一个目的:编译器将同时看到 header 中的声明和源文件中的定义,如果它们不兼容,将发出错误消息。因此,这提供了一种检查,可以在构建库时捕获拼写错误或其他错误。
我在这里仔细检查了所有类似的问题,我真的希望不要重复。 我对 stdio.h 中的以下摘录很感兴趣:
typedef struct _iobuf {
/* Members here omitted ... */
} FILE;
extern FILE _iob[20];
我们使用结构语法定义了一个名为 FILE 的新类型。紧接着,我们声明了一个extern FILE 类型的变量_iob。所以,这个变量一定是从别的地方来的。 但是,既然FILE的定义都在这个文件中,那怎么可能呢?我只看到两种可能性。 第一个是像这样的东西:
#include <stdio.h>
FILE _iob[20] = /* definition */
第二个是有另一个源文件,其中复制粘贴了结构并声明了变量,我想这是一个非常糟糕的做法,我们可以省略。
因为我是一个自学者,我会很高兴收到我的确认understanding.Thanks!
或者:
- 在库源代码文件的某处,有您描述的文本,包含
<stdio.h>
后跟FILE _iob[20]
的定义,或 - 在库源代码文件的某处,有一个
_iob
的定义是用标准 C 以外的编程语言编写的。
后者可能是汇编语言,non-standard C 扩展,或其他语言。 C 的实现不需要仅使用 C 源代码来定义自身。
一般来说,定义 object 的源文件最好也包含它自己的 header。 header 文件的主要目的是告诉其他源文件有关关联源文件中定义的内容。但是在源文件中包含 header 文件还有另一个目的:编译器将同时看到 header 中的声明和源文件中的定义,如果它们不兼容,将发出错误消息。因此,这提供了一种检查,可以在构建库时捕获拼写错误或其他错误。