Macros, die ein Abschnitt der Kode im String umwaldeln um zu printen



  • Mehrere Funktionen haben eine Rückgabewert abhängig davon, was für eine Fehler passierte, in meisten Fällen 0 = kein Fehler, -1 Unbekannte Fehler etc.

    Normalerweise nach aufruf dieser Funktion macht man so ein Check :

    errno = funk1(blablabla...);
    
    if (errno == -1){
    printf ("funk1(blablabla...) Unbekannte Fehler");
    exit errno;}
    

    Ich will es aber nicht immer die Klammer schreiben sondern diese mit Hilfe eines Macros zu realisieren:

    #define SAFE_CALL(funk) \
    {errno = funk; \
    printf("funk" + "Unbekannte Fehler"); \
    exit errno;};}\
    

    Man kan mehr informative Ausgaben machen. z.B. mit __LINE__ und __FILE__ .
    Die Frage ist , wie soll mandie Funktionname und/oder deren
    Parameter in printf() als Strings nützen, da o,G Kode printet "funk" aus
    aus und nicht das Wert in dem Macro. 😃
    Ein Anderer Versuch

    #define ___Quote "
    
    ....
     printf(Quote  funk Quote); \
    ...
    

    erzeugt ein Fehler. Ist es also möglich so zu Strings konvertieren und vielleicht hat jemand andere Vorschläge es zu realisieren?
    MFG.



  • Das ist kein C++.



  • #define print(x) printf(#x)
    
    int main()
    {
    	print(HalloWelt);
    }
    

    Aber ist das überhaupt C++ was du da veranstalltest? exit errno sollte nicht mal kompilieren. Zudem solltest du dir dringend mal Exceptions ansehen.



  • Falsches_Forum schrieb:

    Das ist kein C++.

    Forum verwächselt, sorry.

    Gibt es vielleicht C++ Features dafür?

    oder einfach dann

    cout << #HalloWelt;
    

    soll doch auch funktionieren?



  • cooky451 schrieb:

    #define print(x) printf(#x)
    
    int main()
    {
    	print(HalloWelt);
    }
    

    Und wenn man es immer mit zwei Klammerpaaren schreibt, dann kann man auch mal ein Komma im "Code" haben

    #define print(x) printf(#x)
    
    int main()
    {
    	print(( Hallo(1, 2) + Welt() ));
    }
    

Anmelden zum Antworten