Schlüsselwort 'const' in C?
-
hey
gibt es das Schlüsselwort 'const' in C? oder kann man die nur mittels #define machen?
Im Openbook C von A bis Z steht ziemlich viel über das Thema:
Eine Konstante ist entweder eine ganzzahlige Konstante, eine Gleitpunktkonstante, eine Zeichenkonstante oder ein Stringliteral. Jede Konstante besteht aus einem Typ, der sich aus dem Wert und seiner Schreibweise ergibt.
danke im voraus!
-
consti schrieb:
hey
gibt es das Schlüsselwort 'const' in C?
Jap. Und es tut genau das, zeigt an dass der Wert der Variablen konstant ist (nicht etwa die Variable).
consti schrieb:
oder kann man die nur mittels #define machen?
Define ist nicht so gut dafür. Mit define wird das was du definierst in den Quellcode kopiert. Wenn dort ein Fehler auftritt gibt es blödsinnige Fehlermeldungen weil der Compiler vom define nichts weiß und die Zeilenangaben stimmen auch nicht mehr wenn dein define über mehrere Zeilen geht. const ist besser, weil dir der Compiler im Fehlerfalle genau sagen kann wieso das nicht geht.
Btw: "const c" in google eintippen hätte uns beiden eine Menge Tipperei erspart ^^
-
nwp2 schrieb:
consti schrieb:
hey
gibt es das Schlüsselwort 'const' in C?Jap. Und es tut genau das, zeigt an dass der Wert der Variablen konstant ist (nicht etwa die Variable).
nicht wirklich. du kannst ein 'const' einfach wegcasten.
nwp2 schrieb:
consti schrieb:
oder kann man die nur mittels #define machen?
Define ist nicht so gut dafür.
klar ist es gut, versuch mal einen schreibzugriff auf eine #define-konstante. es wird dir nicht gelingen, egal welche tricks du auch auffährst.
nwp2 schrieb:
Mit define wird das was du definierst in den Quellcode kopiert. Wenn dort ein Fehler auftritt gibt es blödsinnige Fehlermeldungen...
^^wenn man aber bedenkt, dass #define eine textersetzung macht, sind die fehlermeldungen plötzlich nicht mehr so blödsinnig.
btw, die beste möglichkeit sich konstanten zu basteln ist unter C, meiner meinung nach, 'enum'
-
Wie gesagt, kommt drauf an was man machen will.
Will man anzeigen, im Sinne von anzeigen, dass eine Variable auf konstanten Speicher zeigt ist const richtig.
Zum Beispiel bei print(const char *s) zeigt das const an, dass s nicht überschrieben wird und das ist hilfreich.Will man hingegen Leute ärgern kann man auch s in char umcasten und doch überschreiben.
Und wie fricky schon sagte, define ist gut dafür, dass man Daten nicht ändern kann, außer man gibt sich schon sehr viel Mühe. Aber sowas will man nicht. Daten sollen geändert werden können. Konstanten sind dafür da dass es leichter wird den Code zu verstehen und zu bearbeiten, nicht um zu verhindern dass auf die Daten mit Gewalt zugegriffen wird.
Wenn du Konstanten benutzt um deinen Code zu strukturieren benutze const, wenn du Konstanten benutzt um Leute zu ärgern (inklusive dich selbst) benutze define.
-
nwp2 schrieb:
Will man anzeigen, im Sinne von anzeigen, dass eine Variable auf konstanten Speicher zeigt ist const richtig.
aber wirklich nur im sinne von anzeigen. genauso könntest du dir ein
#define readonly
machen. *fg* (na gut, bei 'nem echten 'const' kann ein compiler auch ein bisschen was optimieren).nwp2 schrieb:
Konstanten sind dafür da dass es leichter wird den Code zu verstehen und zu bearbeiten, nicht um zu verhindern dass auf die Daten mit Gewalt zugegriffen wird.
ich finde, 'const' ist gut, um irgendwelche daten in einen nur-lese bereich zu verfrachten. nimm z.b. einen mikrocontroller mit wenig RAM und 100*mehr Flash, ein:
const char x[] = {...viele bytes...};
würde im flash landen und keinen wertvollen RAM-speicher verbrauchen. leider ist darauf auch nicht immer verlass (je nach qualität des compilers). dafür kennen die wiederum irgendwelche #pragmas mit denen das zuverlässig funzt.nwp2 schrieb:
Wenn du Konstanten benutzt um deinen Code zu strukturieren benutze const, wenn du Konstanten benutzt um Leute zu ärgern (inklusive dich selbst) benutze define.
stimmt doch garnicht. #define ist eigentlich eine tolle sache, davor musste keine angst haben.