エラートレース用のマクロを作成しました。簡略化したバージョンは次のとおりです。
#include <stdio.h>
#define ERR(...) \
printf("error @ %d\n", __LINE__)
int main()
{
return ERR(1, /* line 7 */
2, /* line 8 */
3); /* line 10 */
}
実行すると、次のように出力されます。
error @ 10
ただし、印刷された行番号をgrep
出力(grep -n ERR test.c
)と一致させるには、ERR
文字列の行番号()が必要line 7
です。
そのようなことさえ可能ですか?何か案は?
追記:マクロは関数呼び出しのように見えるはずです(そうすることができますreturn ERR(...);
)。コンパイラはGCCバージョン4.4.5です。C99+GNU拡張機能を使用できます。