【发布时间】:2011-11-02 02:27:52
【问题描述】:
我有这样的宏:
#define error_exit(format, ...) \
error_at_line(EXIT_FAILURE, 0, __FILE__, __LINE__, format, ##__VA_ARGS__)
我用它作为一般的致命错误函数。不幸的是,error_at_line 没有 noreturn gcc 属性,因为如果您指定 0 作为第一个参数,它会返回。这会导致问题,具体来说,我收到未初始化的变量警告,因为 gcc 无法确定 error_exit 永远不会返回。
例如:
int x;
switch(...) {
case VALID:
x = 1;
break;
default:
error_exit(...);
}
return x;
给我警告。那么,如何才能将应用 noreturn 应用于宏甚至特定的函数调用?
【问题讨论】: