我想使用尚未定义的typedef结构,但稍后会使用。 是否有类似结构原型的东西?
file container.h
// i would place a sort of struct prototype here
typedef struct
{
TheType * the_type;
} Container;
提交thetype.h
typedef struct {......} TheType;
file main.c
#include "container.h"
#include "thetype.h"
...
答案 0 :(得分:4)
在container.h中:
struct _TheType;
typedef struct _TheType TheType;
比在the.h中:
struct _TheType { ..... };
答案 1 :(得分:3)
替换此行:
// i would place a sort of struct prototype here
这些行:
struct TheType;
typedef struct TheType TheType;
由于您需要在定义类型TheType
之前定义类型Container
,因此您必须使用类型TheType
的前向声明 - 并且为此您还需要前向声明struct TheType
。
然后你不会像这样定义typedef TheType
:
typedef struct {......} TheType;
但您将定义struct TheType
:
struct {......};
答案 2 :(得分:1)
您可以在typedef中声明一个struct:
typedef struct TheType_Struct TheType; // declares "struct TheType_Struct"
// and makes typedef
typedef struct
{
TheType * p;
} UsefulType;
请注意,您在C89和C99中可能只有at most one typedef
in one translation unit(这与C11和C ++不同)。
稍后您必须定义实际的struct TheType_Struct { /* ... */ }
。
答案 3 :(得分:1)
您无法定义尚未定义的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;
}
以上模块是合法的(并且在没有警告的情况下使用gcc编译)。