Я пытаюсь использовать какой-то код для перехвата и печати сообщений об ошибках. В настоящее время я использую макрос как-то так:
#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)
Я мог бы объявить глобальную переменную для хранения возвращаемого значения функции, но это выглядит ужасно, и моя программа многопоточная, так что это может вызвать проблемы. Я надеюсь, что есть лучшее решение.