類似した関数名を1箇所の定義ですましたい

[戻る]
初心者です 2005/01/14(金) 17:37:37
win xp visual c++.net 2003

お世話になります。初心者です。
あるビルドスイッチによりインターフェイスとなる関数名を
一文字だけ変えたく思っております。
例えば、

#ifdef A_SWITCH
int Afunction1(void);
int Afunction2(void);
#else 
int function1(void);
int function2(void);
#endif

と定義するのではなく
イメージ的には以下のように関数の定義は
一箇所のみとしたいのです。
(当然下の例ではビルドエラーがでます)

#ifdef A_SWITCH
 #define A_FUNC     a
#else 
 #define A_FUNC
#endif
int FUNC(function1)(void);
int FUNC(function2)(void);

このようなことは実現可能でしょうか?
もし、ご存知の方がいらっしゃりましたらご教授いただけませんでしょうか?

επιστημη [E-Mail] [HomePage] 2005/01/14(金) 18:02:23
#ifdef A_SWITCH
#define FUN(FUNC) a#FUNC
#else
#define FUN(FUNC) FUNC
#endif

void FUN(function1)() { /* ... */ }
void FUN(function2)() { /* ... */ }

int main() {
  FUN(function1)();
  FUN(function2)();
}

…これじゃダメすか?

初心者です 2005/01/14(金) 18:21:41
ご教授いただいた方法を試してみたのですが、
構文エラーがでてしまいます(TT)

error C2143: 構文エラー : '{' が 'string' の前に必要です。

初心者です 2005/01/14(金) 18:38:26
[[解決]]
a#FUNC → a##FUNC でいけました(^^)
有難うございました。

古いスレッドには追加発言できません。