単一のトークンはありません(必要に応じて「単語」と呼びます)/test1
。/test1
は除算演算子/
の後に識別子が続くものtest1
であり、これらを一緒に追加することはできません。幸いなことに、あなたはそうする必要はありません。それらが間にスペースなしで一緒に表示され、それを文字列化すると、スペースは挿入されません。したがって、を削除するだけ##
です。
また、マクロパラメータ名が定義で使用しているものと一致していることを確認してください。testname
とname
同じではありません。
#define STR(x) #x
#define FILE(testname) STR(timings/testname)
更新:
質問を編集したので、上記は完全な答えではなくなりました。
マクロ定義にスペースを含めたためにスペースを取得し、スペースを含まないようにマクロ定義を書き直す必要があります。これを行う1つの方法は、次のような追加のマクロを使用することです。
#define SUFFIX .new
#define STR(x) STR_(x)
#define STR_(x) #x
#define ID(x) x
#define GENFILE(name,suff) STR(timings/ID(name)suff)
GENFILE(test1, SUFFIX) // expands to "timings/test1.new"
文字列に含める前に展開STR
できるように、マクロには追加のヘルパーマクロも必要であることに注意してください。ID