C中不完整类型和对象类型的定义是什么?另外,你能提供一些例子吗?
ANSI C99在不同的地方提到了两种类型,但我发现很难理解它们各自的含义(没有明确定义它们的段落/句子)。
答案 0 :(得分:6)
我们转到online C standard (draft 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
您无法创建不完整类型的实例,但可以从不完整类型创建指针和typedef名称:
struct f *foo;
typedef struct f Ftype;
要将不完整的结构类型转换为对象类型,我们必须定义结构:
struct f
{
int x;
char *y;
};
答案 1 :(得分:0)
我所知道的类型是:
这是一个例子(也在键盘上:http://codepad.org/bzovTRmz)
#include <stddef.h>
int main(void) {
int i;
struct incomplete *p1;
int *p2;
int (*p3)(void);
p1 = NULL; /* p1 is a pointer to a incomplete type */
p2 = &i; /* p2 is a pointer to an object */
p3 = main; /* p3 is a pointer to a function */
return 0;
}
struct incomplete
可以在另一个翻译单元中定义(具有确定的大小)。这个翻译单元只需要指针