结构声明与定义

Tyl*_*den 5 c struct declaration extern

我如何声明,而不是定义一个结构,例如在多个文件之间共享的数据。我在定义原语时理解这个想法。因此,例如,我可能有:

extern int myvalue;  /* in shared header file */
Run Code Online (Sandbox Code Playgroud)

int myvalue = 5;   /* in data.c file */
Run Code Online (Sandbox Code Playgroud)

但是,我如何对结构做同样的事情。例如,如果我有以下类型:

   typedef struct {
       size_t size;
       char * strings[];
   } STRLIST;
Run Code Online (Sandbox Code Playgroud)

如果我然后使用语句:

STRLIST list;
Run Code Online (Sandbox Code Playgroud)

这既是声明又是定义。那么,如何应用与使用 extern 相同的原则?

dbu*_*ush 5

声明一个结构体的实例(或指向一个结构体的指针):

extern STRLIST* ptrList;
extern STRLIST list;
Run Code Online (Sandbox Code Playgroud)

要定义它:

STRLIST* ptrList;
STRLIST list;
Run Code Online (Sandbox Code Playgroud)

声明一个结构类型

typedef struct STRLIST;
Run Code Online (Sandbox Code Playgroud)

要定义它:

typedef struct {
    size_t size;
    char * strings[];
} STRLIST;
Run Code Online (Sandbox Code Playgroud)

请注意,您可以仅使用声明来使用指向结构的指针,但您必须具有定义才能直接使用该结构。