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.
-
@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
-
@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
-
@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
-
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
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.
-
@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.
-
@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.