ページ 11

ヘッダでのマクロの定義の書き換えって関数内でできますか?

Posted: 2008年2月29日(金) 18:24
by kz
前に一度配布の方法でお世話になりましたkzです。前件は本当にありがとうございました^^
今回はヘッダで宣言しているマクロを関数で書き換えたいのですが、どうもうまくいきません。
ヘッダの定義はこんな感じです。

#define UP KEY_INPUT_E
#define DOWN KEY_INPUT_D
#define LEFT KEY_INPUT_S
#define RIGHT KEY_INPUT_F
#define ENTER KEY_INPUT_L
#define BACK KEY_INPUT_K

これをcommand_fload関数で書き換えます。
command_fload()
int FP;
char botan_read[256],temp[256];
FP=FileRead_open("./txt/ボタン構成.ini");
FileRead_gets(botan_read,256,FP);
FileRead_gets(botan_read,256,FP);

sscanf(botan_read,"%s",temp);
#define UP botan_read

こんな感じです。
一応関数内では定義が変わってるんですが、この関数を抜けると元のマクロの定義に戻ってしまいます。
これをほかの関数でも変わるようにしたいのですがどうすればいいでしょうか??

Re:ヘッダでのマクロの定義の書き換えって関数内でできますか?

Posted: 2008年2月29日(金) 18:43
by GPGA
キー配置を設定してあるテキストファイルを読み込み
その設定でキー配置を変えるようにしているみたいですが
このような可変的なものですよね?

マクロは基本的に定数を扱うものですから、可変的なことはできません。
変数を使いましょう。

>この関数を抜けると元のマクロの定義に戻ってしまいます。
これは、正確にはマクロ定義の位置から翻訳単位の終端もしくは
#undefが定義されるまでに効力があるので、別の翻訳単位や
マクロ定義より上にあるものが置き換えられることはありません。

Re:ヘッダでのマクロの定義の書き換えって関数内でできますか?

Posted: 2008年2月29日(金) 20:02
by kz
わかりました、変数で設定するようにします。
ご返答ありがとうございました^^