c - 如何以及在何处调用外部定义的结构

标签 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 中声明并定义了一个结构体 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/

相关文章:

c++ - 如何根据输入中定义的 "external"int 在结构中定义数组大小

c - scanf() 在 printf() 之前是如何执行的

java - 为什么非法前向引用未找到变量?

c++ - 使成员函数静态化会使程序无法编译。不知道为什么

c++ - 模式名称,将值存储为函数中的静态变量

c++ - 用 extern 尝试一些简单的事情

c++ - 是否还需要 extern "C"才能将 Cpp 文件中使用的全局变量链接到 cfile 中定义的变量?

c - 编译 C 程序时出错

c - 为什么 sizeof ('c' ) 返回 4 而不是 1?

c - NOP 雪橇如何工作?