ファイル: 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 が実行される場所)。
ファイルの関数の 1 つがparser.c
アクセスする必要がありますElement
。何らかの条件が適用される場合、への新しいポインターElement
が作成され、ポインター属性の 1 つが埋められます。その後のいくつかの反復で、他の条件が適用される場合、別のポインター属性がテキストを取得します。次に、他の条件が満たされたときに、へのポインタをElement
別のファイルの関数に渡す必要があります: output.c
.
私の質問は、どのように、どこに電話すればよいかElement
です。条件内でそれへのポインターを作成する場合、if
それは自動変数です。関数が繰り返されるときは表示されません。
宣言できstatic
ますが、コンパイラはエラーを返しますerror: 'e' undeclared (first use in this function)
。例: 反復 1 では、ポインターはif
ステートメントの 1 つの分岐で作成されます。イテレーション 2 では、 の別のブランチにif
アクセスし、次のようなことを行いますe->etag = "a";
を宣言すると、 (最初の)extern Element * e;
の 2 番目の分岐で同じエラーが発生します。if
else if
ファイル output.c
#include element.h
write_element ( Element * e )
{
write_to_disk(... e->itag, e->etag);
}
ファイル 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 );
}