我已经为错误跟踪创建了一个宏。 这是一个简化版本:
#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扩展。
答案 0 :(得分:2)
以下内容如何:
#define VOID_MACRO(...) (void) 0
#define ERR printf("err @ %d\n", __LINE__); VOID_MACRO
答案 1 :(得分:2)
基于@cwyang命题,在定义和昏迷算子中使用带有不匹配括号的宏。
#define ERR (LINEINFO, HANDLEARGS
#define HANDLEARGS(...) __LINE__)
#define LINEINFO printf("error @ %d: ", __LINE_)
return ERR(x,
y,
z);
将扩展为
return (printf("error @ %d: ", 5), 7);
使用gcc。
答案 2 :(得分:0)
也许这是一个选择?
#define ERR(line,...) \
printf("error @ %d\n", line)
ERR(__LINE__
blah,
blah,
blah);