インクルードファイルについて教えてください。

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

インクルードファイルについて教えてください。

#1

投稿記事 by bebe » 16年前

実行中のグローバル変数によってインクルードする部分を変えたいのですが、どうすればいいのでしょうか?

hoge.h
// Ghogeが0だったら
int hoge[10]={0,1,・・・・};
#define hogeMax 10
// Ghogeが1だったら
int hoge[20]={0,1,・・・・};
#define hogeMax 20
// Ghogeが2だったら
int hoge[30]={0,1,・・・・};
#define hogeMax 30

main.cpp
int Ghoge=0; //グローバル変数
for(i=0 ; i<3 ; i++)
{
hyouji();
Ghoge++;
}
hyouji.cpp
#include "hoge.h"
for(i=0 ; i<hogeMax ; i++)
{
printf("%d",hoge);
}


こんな感じのことがやりたいのですがどうすればいいのでしょうか?

Justy

Re:インクルードファイルについて教えてください。

#2

投稿記事 by Justy » 16年前

[color=#d0b0c0" face="monospace]
>実行中のグローバル変数によってインクルードする部分を変えたいのですが、どうすればいいのでしょうか?
[/color]

 インクルードの処理はコンパイル段階で行われますが、グローバル変数の値の評価は
実行時に行われますので、根本的に無理です。


[color=#d0b0c0" face="monospace]
>こんな感じのことがやりたいのですがどうすればいいのでしょうか?
[/color]

 インクルードでは無理ですが、それに近いことを行うことは可能です。
 次のような関数を作ります。

・ int GetHogeMax()関数
 グローバル変数 Ghogeの値に応じて、10とか 20とか 30とかの最大の値を返す。

・ int* GetHogeTable()関数
[color=#d0d0ff" face="monospace]
static int hoge_10[10] = { 0, 1, };
static int hoge_20[20] = { 0, 1, };
static int hoge_30[30] = { 0, 1, };
[/color]

 こんなかんじの変数を作っておき、グローバル変数 Ghogeの値に応じて、
hoge_10か hoge_20か hoge30の配列を返す。


 後は、この2つの関数を使って

[color=#d0d0ff" face="monospace]
for(i=0 ; i<GetHogeMax(); i++)
{
int *hogeTbl = GetHogeTable();
if(hogeTbl)
printf("%d",hogeTbl);
}
[/color]

とすれば、グローバル変数 Ghogeによって扱う配列を変更することが可能になります。

bebe

Re:インクルードファイルについて教えてください。

#3

投稿記事 by bebe » 16年前

justyさん、わかりやすい説明で助かりました。
関数を利用することでできました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る