ファイルからデータを読み取り、そのデータを複数の構造体に格納するio.hからmain.cの関数を呼び出そうとしています。その後、どういうわけか、mainの後の関数で引数としてさまざまな構造体を渡すことができます。これらの後の関数は、alg.hなどの他のファイルで定義されます。
どうすればこれを行うことができますか?externを使用して構造体をグローバルにし、別のファイルに配置しますか?alg.hの関数に構造体の1つの戻り型を持たせることは可能ですか?インクルードの順序に依存しますか?
以下に貼り付けたコードは準拠して機能しますが、いずれかの構造体を移動しようとすると、プログラムがコンパイルされません。
また、たとえば、alg.hで宣言された構造体を持ち、その構造体を後でalg.hで宣言されたパラメーターとして持つ関数を持つことは可能ですか。次に、main.cで、構造体を初期化してio.hで宣言された関数に渡し、構造体にいくつかの値を指定して、main.cに戻し、それをalg.hで宣言された関数に渡しますか?それはクラスのように聞こえますが、Cソリューションが必要であり、構造体のインスタンスが1つだけ必要です。
ありがとう。
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;
}