ログの目的で、ファイル名と行番号を保持する定数文字列に評価されるマクロを定義しています。
それは正常に動作しますが、2 つの追加マクロが必要な理由がわかりSTRINGIFY
ませTOSTRING
ん__FILE__ ":" #__LINE__
。
#include <stdio.h>
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define THIS_ORIGIN (__FILE__ ":" TOSTRING(__LINE__))
int main (void) {
/* correctly prints "test.c:9" */
printf("%s", THIS_ORIGIN);
return 0;
}
これは私には醜いハックのように思えます。
__LINE__
正しく文字列化されるようにステージごとに何が起こるのか、なぜ と のどちらも機能しないのか、誰かが詳細に説明できます__FILE__ ":" STRINGIFY(__LINE__)
か__FILE__ ":" #__LINE__
?