さらに掘り下げた後、私はそれが確かに可能であることを発見しました。
#define VERSION_MAJOR 1
#define VERSION_MINOR 0
#define REVISION b
#define _STRINGIFY(x) #x
#define STRINGIFY(x) _STRINGIFY(x)
/* here's the magic */
#define _CONCAT(x,y) x##y
#define CONCAT(x,y) _CONCAT(x,y)
#define VERSION VERSION_MAJOR.CONCAT(VERSION_MINOR,REVISION)
int version_major = VERSION_MAJOR;
int version_minor = VERSION_MINOR;
char *revision = STRINGIFY(REVISION);
char *version_string = STRINGIFY(VERSION);
はSTRINGIFY
のように、マクロがCONCAT
それを動作させるために、2つのレベルで定義する必要があります。
出力は次のとおり
int version_major = 1;
int version_minor = 0;
char *revision = "b";
char *version_string = "1.0b";
予想通り。
を私は文字列化に間接のレベルを取り出したことを実現します。それを他のマクロのために戻したいのであれば問題ありません。 –