file: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)。
文件parser.c
的其中一项功能应该是Element
。
如果某些条件适用,则会创建一个指向Element
的新指针,其中一个指针属性将被填满。
之后的一些迭代,如果某些其他条件适用,则另一个指针属性获得一些文本。
然后,当满足某些其他条件时,应将指向Element
的指针传递给另一个文件的函数:output.c
。
我的问题是:我应该如何以及在何处致电Element
。
如果在if
条件内创建指针,那么它就是一个自动变量。迭代函数时不可见。
我可以声明它static
,但编译器返回错误error: 'e' undeclared (first use in this function)
。例如:在迭代1中,指针在if
语句的一个分支中创建;在迭代2中,访问if
的另一个分支,我执行e->etag = "a";
如果我声明extern Element * e;
,请在if
的第二个分支(第一个else if
)中收到相同的错误。
file output.c
#include element.h
write_element ( Element * e )
{
write_to_disk(... e->itag, e->etag);
}
file parser.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 );
}
答案 0 :(得分:1)
代码
typedef struct Elem {
char * itag;
char * cont;
char * etag;
struct Elem * previous;
} Element;
未定义元素。它只告诉编译器它的结构。没有定义一个元素。
尝试
extern Element myElement;
在头文件中。
在相应的.c
档案中
Element myElement
;
这将为myElement
答案 1 :(得分:1)
您应该使用关键字«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 */