Makro: Automatisch boolscher Rückgabewert??



  • Hallo,
    liefert ein Makro eigentlich immer automatisch einen boolschen Wert zurück, wenn nichts anders angegeben ist? Wenn ich das hier schreibe:

    #define isBlank(a) ((a) == ' ')
    

    Ich prüfe hier, ob a ein Leerzeichen ist. Wenn ich das in eine If-Struktur schreibe, dann funktioniert das. Aber ich gebe doch gar keinen boolschen Wert zurück, wie z.B. in einer Funktion. Da müsste ich dann schreiben: bool function ();

    Warum ist das so?

    Vielen Dank
    lg, freakC++



  • Hallo,
    aus einem anderen Thread von mir, habe ich nochmal gelesen, dass ein Makro ja nur ewas erstezt.
    Dann wird es klar! Hab' ich übersehen!

    Vielen Dank
    lg, freakC++



  • Ja, Makros sind eben keine Funktionen und müssen folglich auch keinen Rückgabetyp haben. Sie sollten auch nicht als solche missbraucht werden, weil sie eben nur dumme Textersetzung durchführen und das einige Probleme mit sich bringt.

    Also schreib dir ruhig eine Funktion mit Rückgabetyp bool . Wenn du einen brauchbaren Compiler hast, wird diese rausoptimiert, also die entsprechenden Anweisungen werden direkt in den Aufrufercode geschrieben, um den Funktionsaufruf zu ersparen. Mit dem Schlüsselwort inline kannst du diese Forderung verstärken (besonders bei Compilern, denen Inlining über mehrere Module hinweg Mühe macht).

    Ach ja, falls es dich interessiert: In <locale> gibt es einige Funktionen, mit denen du auf Zeichen prüfen und beispielsweise auch in Kleinschreibung umwandeln kannst, darunter std::isalpha() , std::isdigit() , std::tolower() , ...


Anmelden zum Antworten