INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
grundelegende Frage: int vs const int
27.01.2021, 08:00
Beitrag #1
grundelegende Frage: int vs const int
Moin,

der prinzipielle Unterschied ist mir klar.
"int" deklariert eine Variable und "const int" deklariert eine Konstante, kann also nicht mehr verändert werden.

Aber macht man das nur, um den Code sauber und nachvollziehbar zu machen, oder ist der kompalierte Code schneller, wenn ich statt Variablen Konstanten deklariere, z.B. für meine Pin-Konfiguration?

VGM
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2021, 09:07 (Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2021 09:08 von MicroBahner.)
Beitrag #2
RE: grundelegende Frage: int vs const int
Zum einen ist es sicherer, weil der Compiler keine Änderung zulässt an diesen Konstanten. In vielen Fällen ist es auch schneller und RAM-sparender, weil der Compier - wo immer möglich - gar keine 'Variable' im RAM anlegt, sondern in den Anweisungen direkt den konstanten Wert verwendet.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2021, 14:00
Beitrag #3
RE: grundelegende Frage: int vs const int
(27.01.2021 09:07)MicroBahner schrieb:  Zum einen ist es sicherer, weil der Compiler keine Änderung zulässt an diesen Konstanten. In vielen Fällen ist es auch schneller und RAM-sparender, weil der Compier - wo immer möglich - gar keine 'Variable' im RAM anlegt, sondern in den Anweisungen direkt den konstanten Wert verwendet.

Danke für die Antwort.
Und ich habe eben in einem anderen Sketch gesehen, dass
Code:
#define LED 13
auch funtioniert. Hat das am Ende den gleichen Effekt wie
Code:
const byte LED = 13;
?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2021, 14:14 (Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2021 14:15 von MicroBahner.)
Beitrag #4
RE: grundelegende Frage: int vs const int
(27.01.2021 14:00)mhoeting schrieb:  Hat das am Ende den gleichen Effekt
Vordergründig schon. 'Unter der Haube' passiert aber etwas ganz anderes.

Die Zeilen, die mit '#' anfangen, bearbeitet der 'Präprozessor'. Das ist ein reines Textersetzungsprogramm, das vor dem eigentlichen Kompiler läuft. Der Präprozessor weis nichts von C++, der macht reine Textersetzung. In dem Fall wird also überall, wo 'LED' im Code erscheint das durch '13' ersetzt. Erst nach dem Präprozessorlauf bekommt der Compiler deinen Code überhaupt zu sehen. Da sind dann alle Zeilen mit '#', weg und alle Texte ersetzt. Von deinem 'LED' sieht der Compiler nichts, für den ist es exakt das gleiche, als hättest Du selbst überall '13' hingeschrieben.

Das 'const byte LED = 13' ist dagegen eine C++-Anweisung für den Compiler. Der weis also jetzt, dass Du da ein 'byte' definiert hast, dass Du aber im Programm nicht mehr ändern willst. Der Compiler ist jetzt besser in der Lage Prüfungen zu machen, und dich auf Fehler oder Ungereimtheiten ('warnings') hinzuweisen. Deshalb ist die 2. Variante zu bevorzugen.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.01.2021, 14:37
Beitrag #5
RE: grundelegende Frage: int vs const int
(27.01.2021 14:14)MicroBahner schrieb:  
(27.01.2021 14:00)mhoeting schrieb:  Hat das am Ende den gleichen Effekt
Vordergründig schon. 'Unter der Haube' passiert aber etwas ganz anderes.

Die Zeilen, die mit '#' anfangen, bearbeitet der 'Präprozessor'. Das ist ein reines Textersetzungsprogramm, das vor dem eigentlichen Kompiler läuft. Der Präprozessor weis nichts von C++, der macht reine Textersetzung. In dem Fall wird also überall, wo 'LED' im Code erscheint das durch '13' ersetzt. Erst nach dem Präprozessorlauf bekommt der Compiler deinen Code überhaupt zu sehen. Da sind dann alle Zeilen mit '#', weg und alle Texte ersetzt. Von deinem 'LED' sieht der Compiler nichts, für den ist es exakt das gleiche, als hättest Du selbst überall '13' hingeschrieben.

Das 'const byte LED = 13' ist dagegen eine C++-Anweisung für den Compiler. Der weis also jetzt, dass Du da ein 'byte' definiert hast, dass Du aber im Programm nicht mehr ändern willst. Der Compiler ist jetzt besser in der Lage Prüfungen zu machen, und dich auf Fehler oder Ungereimtheiten ('warnings') hinzuweisen. Deshalb ist die 2. Variante zu bevorzugen.

Vielen Dank für diese ausführliche und gute Erklärung!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Anfänger Frage zu code Beispiel peter_schmieg 4 480 03.03.2021 12:24
Letzter Beitrag: Tommy56
  const char zu int Konvertierung Problem Lumplux 1 295 02.02.2021 10:26
Letzter Beitrag: Lumplux
  Frage zu Delay-Alternative Holzwurm56 13 957 24.01.2021 21:55
Letzter Beitrag: Franz54
  Füllstand mit RGB visualisieren [FRAGE] Dukopfo 3 447 27.12.2020 13:53
Letzter Beitrag: Tommy56
  Frage zur <Adafruit_PWMServoDriver.h> Christian_Moba-Arduino 7 737 16.10.2020 12:32
Letzter Beitrag: Tommy56
  Problem mit AnotherIFTTTWebhook | cannot convert 'const char*' to 'char*' dani 3 552 02.10.2020 11:21
Letzter Beitrag: dani
  Generelle Frage zum Schlafen legen DO3GE 3 596 02.10.2020 10:56
Letzter Beitrag: Tommy56
  Frage zu Speicherplatzverbrauch Retian 3 742 04.08.2020 19:11
Letzter Beitrag: Tommy56
  Eine Frage zu einer neuen ino Datei Elly 22 2.460 01.06.2020 19:59
Letzter Beitrag: Elly
Smile Frage zu Font und Auswahl Sulawesi 5 1.316 25.05.2020 12:12
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste