0
以下のようにマクロを定義しました。配列内のマクロへの入力の格納(C)
#define NAME_OUT(name_in) PRE_##name_in##_POST
私はテーブル/配列で定義した名前を使ってこのマクロを繰り返したいと思います。このようなことは可能でしょうか?もしそうなら、私はどのようにこれを行うでしょうか?
注:上記の例は例示の目的のためにのみ:)
以下のようにマクロを定義しました。配列内のマクロへの入力の格納(C)
#define NAME_OUT(name_in) PRE_##name_in##_POST
私はテーブル/配列で定義した名前を使ってこのマクロを繰り返したいと思います。このようなことは可能でしょうか?もしそうなら、私はどのようにこれを行うでしょうか?
注:上記の例は例示の目的のためにのみ:)
は、それはあなたが求めているものを完全には明らかではないのですが、あなたは「Xマクロ」パターンを探しているように、それはたくさんの音:
#include <stdio.h>
// list of data
#define NAME_LIST \
X(foo) \
X(bar) \
X(hello) \
X(world)
// whatever you are actually using these for, maybe an enum or variable names?
typedef enum
{
// temporarily define the meaning of "X" for all data in the list:
#define X(name) PRE_##name##_POST,
NAME_LIST
#undef X // always undef when done
} whatever_t;
// helper macro to print the name of the enum
#define STRINGIFY(str) #str
int main()
{
#define X(name) printf("%s %d\n", STRINGIFY(PRE_##name##_POST), PRE_##name##_POST);
NAME_LIST
#undef X
}
出力:マクロしかし
PRE_foo_POST 0
PRE_bar_POST 1
PRE_hello_POST 2
PRE_world_POST 3
反復?どういう意味ですか?とにかく、私はあなたができることを非常に疑っています。マクロ「名前」は、前処理段階の前にのみ存在します。 –
[boost preprocessor library](http://www.boost.org/doc/libs/1_63_0/libs/preprocessor/doc/index.html)は、プリプロセッサを使用していくつかのタイプの繰り返しを実行できます。あなたが直接行っていることには適していないようですが、ライブラリの使用方法を変更する可能性があります。私たちは本当に役に立つ情報を提供するために、あなたの質問にもっと詳細が必要です。 – Jonesinator