У меня есть такой макрос:
#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 к макросу или даже к конкретному вызову функции?