我正在尝试使用一些代码来捕获和打印错误消息。目前我正在使用这样的宏:
#define my_function(x) \
switch(function(x)) { \
case ERROR: \
fprintf(stderr, "Error!\n"); \
break; \
}
通常,我从不捕获函数输出,这工作正常。但是我发现了一些情况,其中我还需要 function()
的返回值。我尝试了类似下面的操作,但这会产生语法错误。
#define my_function(x) \
do { \
int __err = function(x); \
switch(__err) { \
case ERROR: \
fprintf(stderr, "Error!\n"); \
break; \
} \
__err; \
} while(0)
我可以声明一个全局变量来保存函数的返回值,但这看起来很难看,而且我的程序是多线程的,所以这很可能会导致问题。我希望有更好的解决方案。
最佳答案
GCC 有一个叫做 statement expressions 的特性
所以如果像这样定义宏
#define FOO(A) ({int retval; retval = do_something(A); retval;})
然后你就可以像这样使用它了
foo = FOO(bar);
关于c - 在 C 宏中使用和返回输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3532621/