C 如何以及在何处调用外部定义的结构
文件:element.hC 如何以及在何处调用外部定义的结构,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
#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)
fileparser.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=…
。