私は次のtypedefを持っています
typedef struct {
const char *name;
void *variable;
int type;
int *present;
} parse_t;
および _b が追加された同じ名前の変数と整数を持つ構造体。
例えば:
typedef struct {
char test[12];
int test_b;
long id;
int id_b;
} record_t;
私がやろうとしているparse_t
のは、変数の型に応じてそれを書き込む構造体でレコードを定義するマクロです。
例えば:
record_t record;
prase_t parse[] =
{
ROW("TEST", record, test, TYPE_STRING);
ROW("ID", record, id, TYPE_INT);
}
ROW で次のことを行います。
- 名前の値の設定
- タイプに基づいて、それが の場合は変数として
TYPE_STRING
使用し、それ以外の場合は使用しますrecord.<variable>
&(record.id)
- タイプ値を設定する
- マクロに渡される変数名に _b を追加し、行で使用します。
私は多くのオプションを試しましたが、最も近いものは次のとおりでした
#define ROW(x, y, z, v) {x, (TYPE_STRING == v) ? y.z:&(y.z), v, &(y.z##_b)}
しかし、次のように使用するとエラーが発生します
The ":" operator is not allowed between "char[4]" and "char(*)[4]".
助けていただければ幸いです。たとえば、文字列型用と int 用の 2 つの異なるマクロをいつでも使用できると思いますが、できる限り単純化しようとしています。