我已經創建了一個用於錯誤跟蹤的宏。 下面是一個簡化的版本:如何爲多行宏調用獲取宏名稱__LINE__?
#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擴展。
這似乎是做我需要的。謝謝! – LRipa
哦,C預處理器的樂趣。 – Qix