私はかなりの生成関数を持っていますが、私が作成したいくつかの汎用関数を指し示したいと思います。生成された関数名が変更されます)。これらが生成されたら生成された関数名のために定義されたCプリプロセッサ
void Callback_SignalName1(void);
void Callback_SignalName2(void);
...etc
、私はそれらを総称することができるようにマクロを定義したいと思います:次のように
基本的に、私は、関数名のリストを持っています。
#define SIGNAL1 SignalName1
#define SIGNAL2 SignalName2
#define FUNCTION_NAME(signal) (void Callback_ ## signal ## (void))
...
...
FUNCTION_NAME(SIGNAL1)
{
..
return;
}
問題:Cプリプロセッサではなく、マクロは次のように定義されているもののマクロの名前を取るよう...私の考えでは、このでしたが、私はそれを実装するすべての運を持っていませんでした私は
void Callback_SIGNAL1(void)
代わりの
void Callback_SignalName1(void)
これを回避する良い方法はありますを受けるということですか?
、それはすべきではないの#define FUNCTION_NAME(FUNCNAME)のボイドFUNCNAME(無効)? –
申し訳ありません、もう少し明確に編集しました...そこに入る関数名の別の部分があるという重要な部分は除外しました... – espais
'signal'と'(void) 'の間の##は、正しいものではありません。 ##は、複数のトークンを連結して単一のトークンを作成するためのものです。オープンカッコは、関数名となるトークンの一部であってはなりません。確かに –