doxygen & Konstanten



  • Chris++ schrieb:

    wieso sind #define in C++ tabu und unsauber. Eigentlich sind sie doch ideal...

    #define _MaxPersonen   30
    ...
    
    CStringArray PersonenName[_MaxPersonen];
    
    ...
    
    for(int i = 0; i < _MaxPersonen; i++)
        TueIrgendwasMitDerPerson(PersonenName[i]);
    ...
    

    wenn sich jetzt die anzahl der maximalen personen ändern würde mach ich das nur oben beim define und das ganze Programm hat sich "dynamisch" angepasst...

    Weil man das ganze besser so macht:

    const int  MaxPersonen = 30
    ...
    
    CStringArray PersonenName[MaxPersonen];
    
    ...
    
    for(int i = 0; i < MaxPersonen; i++)
        TueIrgendwasMitDerPerson(PersonenName[i]);
    ...
    

    Namen die mit einem Unterstrich beginnen sind in C++ für den Benutzer tabu.



  • Eine kurze begriffserklärung brauch ich noch:
    1.) #define ist ein Makro?
    2.) wie ist das mit den "inlinemethoden ersetzen" gemeint

    Wenn man MAXVALUE falsch benutzt kann das Ärger machen weil dann nur gemeldet wird das mit der 30 etwas nicht stimmt, anstatt mit MAXVALUE.

    das ist ein Argument, aber es reicht noch nicht um die (jahrelang antrainierten des Chefs) Programmierangewohnheiten zu ändern.



  • 1.) #define ist ein Makro?

    mit defines kannst du dir Macros basteln, ich nehm da mal ganz frech das Macro aus Lektion 1 von Effektiv C++ Programmieren:

    #define max(a,b) ((a) > (b) ? (a) : (b))
    

    **
    2.) wie ist das mit den "inlinemethoden ersetzen" gemeint**

    Anstatt des Macros nimmst du eine Funktion und machst sie inline, damit du wie beim Macro keine Kosten für den Aufruf hast.



  • besorg dir ruhig mal effektiv c++ programmieren, steht viel gutes drin 😉



  • dsa schrieb:

    besorg dir ruhig mal effektiv c++ programmieren, steht viel gutes drin 😉

    das gibts hier nicht zufällig zum runterladen?
    @Makros erstellen: das hört sich ziemlich interessant an.



  • Chris++ schrieb:

    das ist ein Argument, aber es reicht noch nicht um die (jahrelang antrainierten des Chefs) Programmierangewohnheiten zu ändern.

    Dann lies mal ein gutes Buch zu C++. Auch deine anderen Beiträge lassen darauf schließen, dass bei dir einiges im Argen liegt.



  • Makros sollte man so weit wie möglich vermeiden, aber manchmal geht es nicht ohne. Notwendig sind sie bei Include Guards oder bei Dingen wie BOOST_STATIC_ASSERT.



  • Walli schrieb:

    Dann lies mal ein gutes Buch zu C++. Auch deine anderen Beiträge lassen darauf schließen, dass bei dir einiges im Argen liegt.

    hm liegt wohl daran das ich bisher nur ein Tutorial gelesen hab und damit noch nicht fertig bin (Volkards C++ kurs oder so). Naja und ausserdem lerne ich das grad erst im studium (hab zwar schon erfahrung, aber ihr seht ja woraus diese erfahrung besteht 🙄 ) und c++ kommt (leider) erst im nächsten Semester drann (diese sem. war c an der reihe, 3 Monate lang 🙂 ). Naja und das meiste von diesem standard c++ brauch ich auch gar nicht da ich mich eigentlich nur mit MFC beschäftigen darf.

    Standard c++ interessiert mich aber sehr. vor allem wegen der Portabilität auf Unix und so.



  • Ponto schrieb:

    Makros sollte man so weit wie möglich vermeiden, aber manchmal geht es nicht ohne. Notwendig sind sie bei Include Guards oder bei Dingen wie BOOST_STATIC_ASSERT.

    Ah, na dann ist mir auch klar worauf shadeofmine hinaus wollte, ich dachte er hätte jetzt irgendwelche total neuen verwendungszwecke für define die ich noch nicht kanne 😃



  • dsa schrieb:

    Ganz doof gefragt: Was können die was eine Funktion nicht kann?

    Als Beispiel sei so etwas genannt (ungetestet):

    #include <iostream>
    #define debugPrint(what) std::cout << #what << (what) << std::endl
    int main()
    {
       int x = 100;
       debugPrint(x);
    }
    

    Ich brauche so etwas nicht, aber es wäre z.B. eine Anwendung von Makros.



  • Ganz doof gefragt: Was können die was eine Funktion nicht kann?

    Oder wenn man eine Funktion mit Dateinamen (__FILE__) und Zeilennummer (__LINE__) aufrufen will. z.B. bei assert oder exceptions sehr nützlich.


Anmelden zum Antworten