C中不完全类型和对象类型的定义是什么?

Dav*_*her 4 c c99 object-type

C 中不完全类型对象类型的定义是什么?另外,你能提供一些例子吗?

ANSI C99在不同的地方提到了两种类型,尽管我发现很难理解它们各自的含义(没有明确定义它们的段落/句子).

Joh*_*ode 6

让我们转到在线C标准(草案n1256):

6.2.5类型

1存储在对象中或由函数返回的值的含义由用于访问它的表达式的类型决定 .(声明为对象的标识符是最简单的表达式;类型在标识符的声明中指定.)类型被分区为对象类型(完全描述对象的类型),函数类型(描述函数的类型),以及不完整的类型(描述对象但缺少确定其大小所需信息的类型).

不完整类型的示例:

struct f;    // introduces struct f tag, but no struct definition
int a[];     // introduces a as an array but with no defined size
Run Code Online (Sandbox Code Playgroud)

您不能创建不完整类型的实例,但您可以从不完整类型创建指针和typedef名称:

struct f *foo;
typedef struct f Ftype;
Run Code Online (Sandbox Code Playgroud)

要将不完整的结构类型转换为对象类型,我们必须定义结构:

struct f
{
  int x;
  char *y;
};
Run Code Online (Sandbox Code Playgroud)