在多个文件中使用结构

时间:2012-11-05 21:12:25

标签: c

我试图从io.h中调用main.c中的一个函数,该函数从文件中读取数据,将该数据存储到多个结构中,然后以某种方式让我将不同的结构作为参数传递给main中的后续函数。后面的那些函数将在其他文件中定义,例如alg.h。

我该怎么做呢?我是否使用extern并使结构全局并将它们放在一个单独的文件中?是否有可能从alg.h的函数有一个结构的返回类型?它取决于我的包含顺序吗?

下面粘贴的代码符合并且有效,但是任何移动任何结构的尝试都会导致程序无法编译。

此外,是否可以使用例如在alg.h中声明的结构,然后将具有该结构的函数作为稍后在alg.h中声明的参数。然后在main.c中,初始化并将结构传递给在io.h中声明的函数,给结构赋一些值,让它返回到main.c,然后将它传递给alg.h中声明的函数?我知道这听起来像一个类,但我需要一个C解决方案,我只需要一个结构的实例浮动。

感谢。

io.h

struct s1 {
    int num1;
    double num2;
};

struct s2 {
    int num3;
    double num4;
};

void io_init(struct s1*, struct s2*);

io.c中

#include <stdio.h>
#include <stdlib.h>

#include "io.h"

void io_init(struct s1* s1i, struct s2* s2i)
{
    s1i->num1 = 5;
    s1i->num2 = 2.4;

    FILE *fp;
    char line[80];

    fp = fopen("input.txt","rt");

    fgets(line, 80, fp);
    sscanf(line,"%i",&s2i->num3);
    fgets(line, 80, fp);
    sscanf(line,"%i",&s2i->num4);

    fclose(fp);
}

alg.h

void ga_init(struct s1);

alg.c

#include <stdio.h>

#include "io.h"
#include "ga.h"

void ga_init(struct s1 s1i)
{
    printf("%i", s1i.val1);
}

main.c中:

#include <stdio.h>

#include "io.h"
#include "ga.h"

int main() {
    struct s1 s1i;
    struct s2 s2i;

    io_init(&s1i, &s2i);
    ga_init(s1i);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

每个需要声明你的类型的文件(即想要使用它们)必须包含你的头文件(好的,所以前向声明和指针都可以工作,但是如果没有定义那么它们就不能被解引用了#39;无论如何都不适用于此。)

因此,详细说明,如果文件X需要使用struct Y,那么它需要包含包含其声明的头文件,即它。

/* X.c */
#include "Y.h"  /* <-- that's it! */

void foo(Y *obj) {
    /* ... */
}

答案 1 :(得分:0)

这是一些建议。

  • 您的.h文件未定义结构对象。它只是定义类型。它的方式很好。触及这些类型的任何结构的每个人都应该包含此文件。

  • 在调用ga_init时,很少需要按值传递结构。您基本上总是希望通过引用来调用,就像使用io_init

  • 一样
  • 是的,你可以返回一个结构,但同样,返回一个结构的引用几乎总是更好。

  • 您当然可以共享全局定义的结构,除非您的链接器非常糟糕,否则您不需要extern。但是,共享对main()中分配的结构的引用大致相同。