wofür ist const?
-
Hi, ich wollte mal wissen, was const eigentlich macht und was dessen scope ist..
Ist es nur auf der IDE Ebene zu finden, wird es richtig kompiliert und hat es mit der CPU zu tun oder wo kommt es zum Einsatz?Und ich würde noch gerne wissen, was es für Nachteile und Vorteile hat..
Verbraucht es vielleicht mehr Speicher oder verlangsamt das Programm durch einen anderen Zugriff...
-
Das Schlüsselwort 'const' dient in erster Linie dazu, eine Variable davor zu schützen unbeabsichtigterweise überschrieben zu werden, d.h. der Compiler kann dann schon diese Fehler finden (und nicht erst zur Laufzeit).
const int SinnDesLebens = 42; if(SinnDesLebens = 0) // <- Compilerfehler, da Zuweisung, statt Vergleich { puts("Kann nicht sein!"); } else { puts("Ups!"); }
OK: die Compiler sollten hierbei auch schon eine Warnung ausgeben, aber ein Fehler kann ja auch bei anderen Programmteilen entstehen, z.B. bei Übergabe als Pointer und nach einem Funktionsaufruf hat sich dann plötzlich der Inhalt verändert.
Ansonsten hat es keine negativen Auswirkungen, d.h. je nach Systemarchitektur kann es sogar sein, daß alle Konstanten in einen schreibgeschützen Speicherbereich gelegt werden (zumindestens für globale Konstanten).
Leider kann man diese Konstanten in C nicht als Arraygrößen angeben (dies ist erst in C++ möglich und ersetzt die 'defines').
-
Th schrieb:
Ansonsten hat es keine negativen Auswirkungen...
--> http://c2.com/cgi/wiki?ConstIsaVirus
Th schrieb:
je nach Systemarchitektur kann es sogar sein, daß alle Konstanten in einen schreibgeschützen Speicherbereich gelegt werden (zumindestens für globale Konstanten).
ja, z.b. ins ROM, um nicht sinnlos RAM zu verschwenden. meiner meinung nach der einzig sinnvolle anwendungsfall für 'const'.
Th schrieb:
Leider kann man diese Konstanten in C nicht als Arraygrößen angeben (dies ist erst in C++ möglich und ersetzt die 'defines').
ich finde #defines für konstanten viel besser.
-
Danke für die Antworten
Aber soll ich es nun verwenden oder nicht? ._.
-
hallo2 schrieb:
Aber soll ich es nun verwenden oder nicht? ._.
wenn du daten in einem read-only bereich brauchst, dann ja.
sonst würde ich es nicht nehmen. ist aber ansichtssache. manche stehen auf die sogenannte 'const-correctness'. ich halte mich eher an: http://c2.com/cgi/wiki?AvoidConstCompletely
-
Ich benutze const sehr intensiv und regelmäßig, da es die Lesbarkeit und Optimierbarkeit des Codes erhöht (da man sich spezifischer ausdrücken kann). #define ist keine gute Alternative, da es sich um eine einfache (dumme) Textersetzung handelt, die _vor_ dem kompilieren durchgeführt wird!
-
rüdiger schrieb:
#define ist keine gute Alternative, da es sich um eine einfache (dumme) Textersetzung handelt, die _vor_ dem kompilieren durchgeführt wird!
...was nicht immer ein nachteil sein muss. um sich z.b. konstanten zu basteln ist #define doch optimal.
-
#define-freak schrieb:
...was nicht immer ein nachteil sein muss. um sich z.b. konstanten zu basteln ist #define doch optimal.
nur wenn man ignoriert dass es unterschiede zwischen konstanten und deinen aliasnamen für literale gibt.
-
pah schrieb:
nur wenn man ignoriert dass es unterschiede zwischen konstanten und deinen aliasnamen für literale gibt.
nein, denn das ignoriert man gerade nicht. solche aliase für literale sind absolut unveränderlich (ok, mit #undef schon, aber da muss schon richtig böse absicht dahinter stecken).