C言語初心者のかたとお見受けします。大体想像がつくのでお答えしますね。
"struct.h"は構造体の定義として私のすきな流儀でかいてありすね。タグは必要がなければ書かない方がいいと思います。
コード:
/* "struct.h" */
typedef struct{
int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int money; //お金
int img; //画像
int slow; //スローかどうか
double x, y; //座標
}ch_t;
"graph.h" は構造体変数の宣言で問題ないですね。
コード:
/* "graph.h" */
extern ch_t ch;
さて問題となるgraph.c を書いてみます。テスト用に int grp(void)関数を作りました。
コード:
#include "struct.h"
#include "graph.h"
int grp(void){
ch.flag = 12345;
return 0;
}
次にメインのプログラム c1.c をかきます。他のファイルでextern 宣言されている 構造体変数 chをグローバル宣言します。
コード:
#include <stdio.h>
#include"struct.h"
ch_t ch;
extern int grp(void);
int main(void)
{
grp();
printf("%d\n",ch.flag);
return 0;
}
[code]
コンパイルは使い安いボーランドCの後継C++Builderを使いました。cx.bat バッチをダブルクリックするだけです。
cx.bat
[code]
bcc64 c1.c graph.c
dir *.exe
pause
c1.exe
pause
http://www2.koyoen.birdview.co.jp/~abcxyz/z0815a.png
#include ファイルはCの欠点でC#(C++++)では全く必要なくなりました。#include ファイルは覚えるのが大変ですよ。