文件: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
条件内创建指向它的指针,那么它就是一个自动变量。迭代函数时不可见。
我可以将其声明为静态
,但编译器会返回错误error: 'e' undeclared (first use in this function)
。例如:在迭代 1 中,在 if 语句的一个分支中创建指针;在迭代 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 );
}
最佳答案
代码
typedef struct Elem {
char * itag;
char * cont;
char * etag;
struct Elem * previous;
} Element;
没有定义元素。它只告诉编译器它的结构。没有定义任何元素。
尝试一下
extern Element myElement;
在头文件中。
在对应的.c
文件中放入
元素 myElement
;
这将为myElement
预留空间
关于c - 如何以及在何处调用外部定义的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10334040/