calloc oder new



  • @wob
    #define ist kein Macro sondern eine Konstante.
    C++ verwaltet den Speicher dynamisch. Bei MC ist der Speicher knapp und wird fragmentiert,
    wenn der Platz nicht von vornherein reserviert wird (new, malloc, calloc)



  • @hanss sagte in calloc oder new:

    #define ist kein Macro sondern eine Konstante.

    https://en.cppreference.com/w/cpp/preprocessor/replace



  • @hanss sagte in calloc oder new:

    @wob
    #define ist kein Macro sondern eine Konstante.
    C++ verwaltet den Speicher dynamisch. Bei MC ist der Speicher knapp und wird fragmentiert,
    wenn der Platz nicht von vornherein reserviert wird (new, malloc, calloc)

    #define ist im Grunde nichts anderes als eine Textersetzung.
    Edit: daher kannst du defines auch nicht debuggen.

    Starte mal deinen gdb und versuch mal den Wert von "Proto_max" anzuzeigen.... Du wirst enttĂ€uscht sein 😉


  • Banned

    @hanss sagte in calloc oder new:

    #define ist kein Macro sondern eine Konstante.

    Eine PrĂ€prozessoranweisung, um sich Makros und Konstanten zu basteln. 😇



  • @RBS2 sagte in calloc oder new:

    @hanss sagte in calloc oder new:

    #define ist kein Macro sondern eine Konstante.

    Eine PrĂ€prozessoranweisung, um sich Makros und Konstanten zu basteln. 😇

    du meinst solche Konstanten:

    #define meinedaemlichekonstante const int konstante = 42;
    meinedaemlichekonstante
    

    Das ist zwar eine Konstante namens "konstante", die man auch debuggen kann, aber es ist so ziemlich die dĂ€mlichste Art eine Konstante zu bauen 😎


  • Banned

    @It0101 sagte in calloc oder new:

    @RBS2 sagte in calloc oder new:

    @hanss sagte in calloc oder new:

    #define ist kein Macro sondern eine Konstante.

    Eine PrĂ€prozessoranweisung, um sich Makros und Konstanten zu basteln. 😇

    du meinst solche Konstanten:

    #define meinedaemlichekonstante const int konstante = 42;
    meinedaemlichekonstante
    

    Das ist zwar eine Konstante namens "konstante", die man auch debuggen kann, aber es ist so ziemlich die dĂ€mlichste Art eine Konstante zu bauen 😎

    Besser:

    Makros ohne Parameter werden hĂ€ufig fĂŒr symbolische Namen von Konstanten verwendet:

    #define PI 3.14159

    Quelle: https://de.wikipedia.org/wiki/C-PrÀprozessor


  • Mod

    Da haben sich die Leute von Arduino so viel MĂŒhe gegeben, auch neueste Sprachstandards und Compilerfeatures anzubieten. Da muss man nicht mehr so programmieren, als sei noch 1965, der Compiler strunzdumm, und selbst das Hostsystem auf 64kB beschrĂ€nkt


    Programmier einfach so, wie du es (hoffentlich) ganz normal tun wĂŒrdest. Die BeschrĂ€nkung liegt in der technischen LeistungsfĂ€higkeit des Zielsystems, nicht in den Sprachfeatures, die du verwenden kannst.



  • @RBS2 sagte in calloc oder new:

    @It0101 sagte in calloc oder new:

    @RBS2 sagte in calloc oder new:

    @hanss sagte in calloc oder new:

    #define ist kein Macro sondern eine Konstante.

    Eine PrĂ€prozessoranweisung, um sich Makros und Konstanten zu basteln. 😇

    du meinst solche Konstanten:

    #define meinedaemlichekonstante const int konstante = 42;
    meinedaemlichekonstante
    

    Das ist zwar eine Konstante namens "konstante", die man auch debuggen kann, aber es ist so ziemlich die dĂ€mlichste Art eine Konstante zu bauen 😎

    Besser:

    Makros ohne Parameter werden hĂ€ufig fĂŒr symbolische Namen von Konstanten verwendet:

    #define PI 3.14159

    Quelle: https://de.wikipedia.org/wiki/C-PrÀprozessor

    Aber daraus resultiert keine Variable namens PI. Daher ist es im programmier-technischen Sinne keine Konstante, weil eine Konstante eine Variable ist, deren Inhalt sich nicht Àndert.


  • Banned

    @It0101 sagte in calloc oder new:

    Aber daraus resultiert keine Variable namens PI.

    Es soll ja auch eine Konstante sein. Variablen sind variabel. Konstanten nicht.



  • @RBS2 sagte in calloc oder new:

    @It0101 sagte in calloc oder new:

    Aber daraus resultiert keine Variable namens PI.

    Es soll ja auch eine Konstante sein. Variablen sind variabel. Konstanten nicht.

    Im Grunde haste du Recht. Der eigentliche Punkt ist, dass PI sich niemals Ă€ndert und der Weg ĂŒber das Makro daher in Ordnung ist. Aber eine Array-Size, die sich möglicherweise zu einem spĂ€teren Zeitpunkt Ă€ndert als Makro zu machen ist aus meiner Sicht Quark.
    Zumal, wie erwÀhnt, die debug-fÀhigkeit fehlt.


  • Banned

    @It0101 sagte in calloc oder new:

    Aber eine Array-Size, die sich möglicherweise zu einem spÀteren Zeitpunkt Àndert als Makro zu machen ist aus meiner Sicht Quark.
    Zumal, wie erwÀhnt, die debug-fÀhigkeit fehlt.

    Klar, wenn die GrĂ¶ĂŸe variieren kann, sind Konstanten natĂŒrlich fehl am Platz.

    Aber was Debug angeht: es gibt keinen vernĂŒnftigen Grund, warum ein Debugger kein #define auswerten kann, wo er doch auch Zugriff auf den Source Code hat. Du sagst, der GDB kann das nicht, aber bei einem anderen Debugger habe ich mal erlebt, dass er es konnte. Weiß aber nicht mehr, bei welchem.


Log in to reply