-------------struct.h----------------
typdef struct
{
int x;
int y;
};ABC
---------------
---------spot.c-------------
#include "struct.h"
ABC abc [] = {{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1},{1,1}};
void Spot(int xx, int yy, int num)
{
int x = abc[num].x;
int y = abc[num].y;
---------------
---------nip.c-------------
#include "struct.h"
static ABC abc [] = {{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1},{1,1}};
void nip(int xx, int yy, int num)
{
int x = abc[num].x;
int y = abc[num].y;
---------------構造体の使用方法について
-
こんばんは
構造体の使用方法について
先ほど解決した構造体についてソースを張っておりませんでしたので 確認の程、お願いいたします
-
sq
Re: 構造体の使用方法について
自分のコードをコンパイルしてみましたか?
それに本当にやりたいことと一致しているのでしょうか?
それに本当にやりたいことと一致しているのでしょうか?
/* spot.c */
#include "struct.h"
#include <stdio.h>
void spot(int xx, int yy, int num)
{
int x = abc[num].x;
int y = abc[num].y;
printf("%d %d\n", x, y);
}
/* nip.c */
#include "struct.h"
#include <stdio.h>
ABC abc [] = {{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1},{1,1}};
void nip(int xx, int yy, int num)
{
int x = abc[num].x;
int y = abc[num].y;
printf("%d %d\n", x, y);
}
-
こんばんは
Re: 構造体の使用方法について
by sq 様 返信遅れまして申し訳ございませんでした。
自分のコードをコンパイルしてみましたか?
<<コンパイルしてもエラーはありませんでした。
それに本当にやりたいことと一致しているのでしょうか?
<<本当は龍神録5章のようなファイル分割を目指していました。
下記にまねたものを記述しました。ですが#define GLOBAL extern が灰色に表示されます。
機能していないのでしょうか。
---main.c---
---nip.c---
---spot.c---
---struct.h---
---GV.h---
---function.h---
---define.h---
自分のコードをコンパイルしてみましたか?
<<コンパイルしてもエラーはありませんでした。
それに本当にやりたいことと一致しているのでしょうか?
<<本当は龍神録5章のようなファイル分割を目指していました。
下記にまねたものを記述しました。ですが#define GLOBAL extern が灰色に表示されます。
機能していないのでしょうか。
---main.c---
#define GLOBAL_INSTANCE
#include "GV.h"
int main()
{
for(int i = 0; i < 4; i++){
nip(0,0,i);//x,y座標指定
spot(0,0,i);
}
return 0;
}#include <stdio.h>
#include "GV.h"
ABC abc [] = {{0,1},{0,-1},{1,0},{0,1}};//上下左右
void nip(int xx, int yy, int num)//main内で指定したx,y座標とi「abc[]の方向」
{
int nx = abc[num].x;
int ny = abc[num].y;
int x = xx + nx;
int y = yy + ny;
for(int i = 0; i < 4; i++){// 「num」で指定した方向に4進む
printf("nip_num: %d X:%d Y:%d\n", num, x, y);
x += nx;
y += ny;
}
}#include <stdio.h>
#include "GV.h"
void spot(int xx, int yy, int num)
{
int nx = abc[num].x;
int ny = abc[num].y;
int x = xx + nx;
int y = yy + ny;
for(int i = 0; i < 4; i++){
printf("spot_num: %d X:%d Y:%d\n", num, x, y);
x += nx;
y += ny;
}
printf("\n");
}#include "define.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern //ここが初めは色がついていたのですが、分割していくうちに灰色になりました
#endif
#include "function.h"
GLOBAL ABC abc[];Re: 構造体の使用方法について
#defineを安易に使わないでください。こんばんは さんが書きました:下記にまねたものを記述しました。ですが#define GLOBAL extern が灰色に表示されます。
機能していないのでしょうか。
C言語を習得するなら、予約語を別名で定義することはやめた方がよいと思います。
そもそも関数内でプロトタイプ宣言する(sqさんの示されたコードはmain関数の中で宣言してましたよね?)のでなければ、externの必要はありません。※変数は要りますよ。関数のプロトタイプ宣言のことです。
したがってGLOBAL_INSTANCE、GLOBALの定義も要らないように思えるのですが。
GV.hにあるABCの変数も、GLOBALにしちゃうと、混乱のもとだよ。(ヘッダーに実体を載せる可能性があることはしないこと!)
written by へにっくす
-
こんばんは
Re: 構造体の使用方法について
へにっくす様 度々感謝いたします。
sq様が記述しましたソースを参考にし整理しました。
main.c
nip.c
spot.c
struct.h
function.h
「nip.c」と「spot.c」は引数や変数は同じまま、処理内容に違いを持たせ、一つのソースに纏めようと思っております。
何かありましたら返信お願いいたします。
sq様が記述しましたソースを参考にし整理しました。
main.c
#include "function.h"
int main()
{
for(int i = 0; i < 4; i++){
nip(0,0,i);//x,y座標指定
spot(0,0,i);
}
return 0;
}#include <stdio.h>
#include "struct.h"
ABC abc [] = {{0,1},{0,-1},{1,0},{0,1}};//上下左右
void nip(int xx, int yy, int num)//main内で指定したx,y座標とi「abc[]の方向」
{
int nx = abc[num].x;
int ny = abc[num].y;
int x = xx + nx;
int y = yy + ny;
for(int i = 0; i < 4; i++){// 「num」で指定した方向に4進む
printf("nip_num: %d X:%d Y:%d\n", num, x, y);
x += nx;
y += ny;
}
}#include <stdio.h>
#include "struct.h"
void spot(int xx, int yy, int num)
{
int nx = abc[num].x;
int ny = abc[num].y;
int x = xx + nx;
int y = yy + ny;
for(int i = 0; i < 4; i++){
printf("spot_num: %d X:%d Y:%d\n", num, x, y);
x += nx;
y += ny;
}
printf("\n");
}何かありましたら返信お願いいたします。