C 如何以及在何处调用外部定义的结构

C 如何以及在何处调用外部定义的结构,c,static,extern,linkage,C,Static,Extern,Linkage,文件:element.h #ifndef ELEMENT_H #define ELEMENT_H typedef struct Elem { char * itag; char * cont; char * etag; struct Elem * previous; } Element; void printElement ( Element * ); #endif /* ELEMENT_H */ 我在Element.h和Element.c中声明并定义了一个结构Eleme

文件:element.h

#ifndef ELEMENT_H
#define ELEMENT_H 

typedef struct Elem {
  char * itag;
  char * cont;
  char * etag;
  struct Elem * previous;
} Element;

void printElement ( Element * );
#endif /* ELEMENT_H */
我在Element.h和Element.c中声明并定义了一个结构
Element
(未显示,但在其中执行malloc)

file
parser.c
的函数之一应该访问
元素
。 如果某些条件适用,将创建指向
元素
的新指针,并填充其中一个指针属性。 在一些迭代之后,如果其他条件适用,另一个指针属性将获得一些文本。 然后,当满足某些其他条件时,指向
元素的指针应传递给另一个文件的函数:
output.c

我的问题是:我应该如何以及在哪里调用
元素
。 如果在
条件中创建指向它的指针,那么它是一个自动变量。迭代函数时不可见

我可以将其声明为
静态
,但编译器返回一个错误
错误:“e”未声明(首次在此函数中使用)
。例如:在迭代1中,指针是在
if
语句的一个分支中创建的;在迭代2中,如果访问了
的另一个分支,则执行类似
e->etag=“a”的操作

如果我声明
外部元素*e
,则在
if
的第二个分支中获得相同的错误(第一个
else if

文件输出.c

#include element.h
write_element ( Element * e )
{
    write_to_disk(... e->itag, e->etag);
}
文件解析器.c

#include "element.h"

# some other functions
void parser ( char * f, char * b )
{
    if ( something ) {
        /* Need to access externally defined Element type structure, but it should be visible in all `parser` function */
        Element * e;
        e->itag = ... realloc(...)
        ...

    } else if (..... ) {
        /* Should assume a pointer to Element is already created */
        e->etag = "a";

    } else if ( .... ) {
        /* Should assume a pointer to Element is already created */
        /* and itag, etag and cont have some text */
        write_element( e );
    }
代码

typedef struct Elem {
  char * itag;
  char * cont;
  char * etag;
  struct Elem * previous;
} Element;
不定义元素。它只告诉编译器它的结构。没有定义一个元素

试着吃

extern Element myElement;
在头文件中

在相应的
.c
文件中

元素myElement


这将为myElement保留空间。您应该使用关键字“extern”。例如:

f.h:

#ifndef H_LP_F_20120426154230   
#define H_LP_F_20120426154230 

typedef struct Elem {
    char *itag;
    char *cont;
    char *etag;
    struct Elem *previous;
} Element;

extern Element myStruct;

#endif
f.c

#include "f.h"

Element myStruct;
/* nom I can use myStruct */

主要问题是如何初始化在
if
分支内部外部声明的元素,并使其在包含该
if
分支的函数的其他迭代中可访问,它是该
if
分支还是在
else if
分支中。数据类型为
元素
myElement
是包含数据的变量。因此,要设置
itag
,例如在代码中设置
myElement.itag=…