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