我想使用尚未定义的 typedef 结构,但它是稍后定义的。 有没有类似结构体原型的东西?
文件容器.h
// i would place a sort of struct prototype here
typedef struct
{
TheType * the_type;
} Container;
文件 thetype.h
typedef struct {......} TheType;
文件main.c
#include "container.h"
#include "thetype.h"
...
替换此行:
// i would place a sort of struct prototype here
用这些行:
struct TheType;
typedef struct TheType TheType;
由于您需要在定义类型
TheType
之前定义类型 Container
,因此您必须使用类型 TheType
的前向声明 - 为此,您还需要结构体 TheType
的前向声明。
那么你就不会像这样定义 typedef
TheType
:
typedef struct {......} TheType;
但是你将定义结构体
TheType
:
struct TheType {......};
在容器中.h:
struct _TheType;
typedef struct _TheType TheType;
比在 thetype.h 中:
struct _TheType { ..... };
您可以在 typedef 中声明一个结构体:
typedef struct TheType_Struct TheType; // declares "struct TheType_Struct"
// and makes typedef
typedef struct
{
TheType * p;
} UsefulType;
请注意,在 C89 和 C99 中,一个翻译单元中最多只能有
typedef
(这与 C11 和 C++ 不同)。
稍后您必须定义实际的 struct TheType_Struct { /* ... */ }
。
struct
;但你可以定义一个指向这样的指针
struct
struct one {
struct undefined *ok;
// struct undefined obj; /* error */
};
int foo(void) {
volatile struct one obj;
obj.ok = 0; /* NULL, but <stddef.h> not included, so 0 */
if (obj.ok) return 1;
return 0;
}
上面的
module是合法的(并且用gcc编译没有警告)。