gpt4 book ai didi

c - 如何获取多行宏调用的宏名称 __LINE__?

转载 作者:行者123 更新时间:2023-12-01 11:49:02 24 4
gpt4 key购买 nike

我已经创建了一个用于错误跟踪的宏。这是一个简化版本:

#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 字符串(第 7 行)。

这样的事情有可能吗?有什么想法吗?

补充说明:该宏应该看起来像一个函数调用(这样我就可以执行 return ERR(...);)。编译器是 GCC 版本 4.4.5。可以使用 C99 + GNU 扩展。

最佳答案

基于@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。

关于c - 如何获取多行宏调用的宏名称 __LINE__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com