Über-und Rückgabe die Ausgabe in C-makro

Ich versuche instrument code zu fangen und zu drucken Fehlermeldungen. Derzeit bin ich mit einem makro somethng wie diese:

#define my_function(x) \
  switch(function(x)) { \
    case ERROR: \
      fprintf(stderr, "Error!\n"); \
      break; \
  }

Ich normalerweise nie erfassen die Funktion Ausgabe und dies funktioniert gut. Aber ich habe ein paar Fälle, wo ich auch brauchen, der return-Wert function(). Ich habe versucht, so etwas wie die folgenden, aber diese produziert einen syntax-Fehler.

#define my_function(x) \
  do { \
    int __err = function(x); \
    switch(__err) { \
      case ERROR: \
        fprintf(stderr, "Error!\n"); \
        break; \
    } \
    __err; \
  } while(0)

Ich könnte, deklarieren Sie eine Globale variable, um den Rückgabewert der Funktion, aber das sieht häßlich aus und mein Programm ist multithreaded, so dass ' s wahrscheinlich, Probleme zu verursachen. Ich hoffe, es gibt eine bessere Lösung gibt.

Warum gehst du nicht machen es eine inline-Funktion?
Der "output" einer Funktion ist nicht das gleiche wie der "Rückgabewert" einer Funktion. Sie wollen den return-Wert.
Dein post ist fehlen einige Zeilen, Fortsetzung Marker. Mag sein dass Sie Ihre syntax-Fehler.

InformationsquelleAutor Michael Mior | 2010-08-20

Schreibe einen Kommentar