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