文件:元素.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)
。if
例如:在迭代 1 中,指针在语句的一个分支中创建;在迭代 2 中,访问了另一个分支,if
我做了类似的事情e->etag = "a";
如果我声明,在(第一个)extern Element * 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 );
}