我正在使用 gcc 编译 C99 代码。我想编写一个宏,它将返回一个包含函数名和行号的字符串。
这就是我所拥有的:
#define INFO_MSG __FILE__ ":"__func__"()"
但是,当我编译尝试使用此字符串的代码时,例如:
char buff[256] = {'\0'}
sprintf(buff, "Something bad happened here: %s, at line: %d", INFO_MSG, __LINE__);
printf("INFO: %s\n", buff);
我收到以下错误消息:
error: expected ‘)’ before ‘__func__’
我已将问题追溯到宏。当我__func__
从宏中删除时,代码可以正确编译。
如何修复宏,以便可以__func__
在字符串中包含预定义的宏?