#define überhaupt benutzbar?



  • Hallo ich habe eine Frage, kann man mit "#define" überhaupt benutzen? Weil immer wnen ich eine solche variabel nutzen bekomm ich nur Fehler, ein Beispiel:

    const int feste_zahl = 20; 
    #define feste_zahl2  = 20;
    
    std::cout << "Der Wert der Konstanten ist: " << feste_zahl << std::endl;
    

    Geht ohne Probleme

    const int feste_zahl = 20; 
    #define feste_zahl2  = 20;
    
    std::cout << "Der Wert der Konstanten ist: " << feste_zahl2 << std::endl; //Zeile 35
    

    Compiler Fehler:

    35 E:\dokumente\C++\C++ Lernen\Variabeln.cpp expected primary-expression before '=' token 
    35 E:\dokumente\C++\C++ Lernen\Variabeln.cpp expected primary-expression before '<<' token
    


  • [] du weißt, was define macht 😉

    tipp: entferne mal das "=" zwischen "feste_zahl2" und "20". der preprozessor ersetzt nämlich feste_zahl2 überall, wo er es findet, durch den nachfolgenden ausdruck. das ist in dem fall "= 20" und offensichtlich nicht im sinne des erfinders. das semikolon stört vermutlich auch.



  • Um ehrlich zu sein wusste ich nicht genau was das macht, deswegen wollte ich es ja ausprobieren. 😃
    Aber Danke. 🙂



  • Und an deinem kleinen Beispiel hast du auch schon gleich gesehen, dass defines nicht so toll sind.
    Lieber const ... verwenden.
    Denn dann kann der Compiler gleich prüfen, ob es vom Typ her passt.
    Das define wird vom Preprozessor einfach knallehart ersetzt.
    Dem ist egal, ob nun aus "feste_zahl2" 20 oder "=20;" wird. Dem Compiler aber nicht mehr.



  • hehejo schrieb:

    Und an deinem kleinen Beispiel hast du auch schon gleich gesehen, dass defines nicht so toll sind.
    Lieber const ... verwenden.
    Denn dann kann der Compiler gleich prüfen, ob es vom Typ her passt.
    Das define wird vom Preprozessor einfach knallehart ersetzt.
    Dem ist egal, ob nun aus "feste_zahl2" 20 oder "=20;" wird. Dem Compiler aber nicht mehr.

    Amen.



  • Define ist zwar böse™, aber trotzdem kann mans für manche Sachen gebrauchen (zB Inclusion guards oder auch in einer C/C++ Standard Library)


Anmelden zum Antworten