構造体が意味をなしていない…

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 構造体が意味をなしていない…

Re: 構造体が意味をなしていない…

#8

by agunesu » 6年前

ありがとうございました。

Re: 構造体が意味をなしていない…

#7

by Math » 6年前

Windows Vista, VC++2008 でコンパイル/リンク してみました。
VS2017 Community と全く同じソース/ バッチファイルです。
(32ビット x86)

http://www2.koyoen.birdview.co.jp/~abcxyz/z0815c.png

Re: 構造体が意味をなしていない…

#6

by Math » 6年前

#3 の c1.c  のなかに cx.bat の説明が混ざってました。
[訂正]
c1.c

コード:

#include <stdio.h>
#include"struct.h"

ch_t ch; 
extern int grp(void);

int main(void)
{
    grp();
    printf("%d\n",ch.flag);
    return 0;
}

Re: 構造体が意味をなしていない…

#5

by Math » 6年前

CX-Builder はCommunity Ed. (64ビット版)ですが VS2017Community でコンパイルしてみると

cl.exe を使用します。

c.bat

コード:

rem コンパイル後リンク
cl c1.c graph.c
dir *.exe
pause

rem 実行結果
c1.exe
pause
'x64' モード
http://www2.koyoen.birdview.co.jp/~abcxyz/z0815b.png

Re: 構造体が意味をなしていない…

#4

by Math » 6年前

CX-Builderのバッチファイル cx.bat をわすれてました。ボーランドCの後継で使い安いですね。
バッチファイルをダブルクリックするだけで起動します。

cx.bat

コード:

bcc64 c1.c graph.c
dir *.exe
pause
c1.exe
pause

Re: 構造体が意味をなしていない…

#3

by Math » 6年前

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 ファイルは覚えるのが大変ですよ。

Re: 構造体が意味をなしていない…

#2

by usao » 6年前

あるファイルに(graph.hかな)に
ch_t って突然書いてみたら,
コンパイラに「ch_t ってのは何だよ? しらねーよ」と言われた,という感じですか.

> <struct.h>
というヘッダファイルを一体何のために書いたのか? どう使うつもりなのか?
というあたりを詳しく説明できませんか?

構造体が意味をなしていない…

#1

by agunesu » 6年前

<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>

extern ch_t ch;

この文がエラーが発生します内容は【識別子"ch_t"が定義されていません】とでます。どうしたらいいかわかんないので返答をよろしくお願いします。<(_ _)>

ページトップ