KeyWord const
-
Wenn ich eine Funktion habe der ich 3 Parameter übergeben kann (ist egal was), und diese in der Funktion konstant bleiben dann kann ich die Funktion ja so deklarieren wie folgt:
void FunktionXYZ(const char *data ,const int len ,const int type);
oder sehe ich da was falsch?
-
Ja. Aber konsequent müsste das heißen:
void foo(const char* const, const int, const int); // --------------^^^^^
Jetzt ist wirklich alles const. Denn const char* bedeutet "pointer to const char", währen const char* const "const pointer to const char" bedeutet.
Diese schreibweise ist für Parameter aber unüblich, alles was nach außen keine Garantien gibt, wird nicht const qualifiziert. (Da es dem Aufrufer keine Informationen gibt, seine Variablen können ja eh nicht verändert werden, da der Wert kopiert wird.)
void foo(const char*, int, int);
-
cooky451 schrieb:
Diese schreibweise ist für Parameter aber unüblich, alles was nach außen keine Garantien gibt, wird nicht const qualifiziert. (Da es dem Aufrufer keine Informationen gibt, seine Variablen können ja eh nicht verändert werden, da der Wert kopiert wird.)
Hä? Was soll das denn heissen?
Alles was const sein kann, sollte man auch const deklarieren. Das führt dazu, das man sich auch dazu zwingen muss, über das Design seiner Funktionen nachzudenken.
Durch const kauft man sich durch den Compiler kostenlose und kompetente statische Codeprüfungen ein, eine const-Verletzung muss durch den Compiler standardkonform (irgendwie) bemängelt werden.
Außerdem soll const hier nicht dem Aufrufer irgendwas bringen, sondern dem lokalen Funktionscode.
-
Wutz schrieb:
Außerdem soll const hier nicht dem Aufrufer irgendwas bringen, sondern dem lokalen Funktionscode.
Tut es aber nicht, da es sich lediglich um Funktionsdeklarationen handelt. Bei der Funktionsdefinition kannst du das const ja wieder dazuschreiben, wenn es dir Spaß macht.
-
Ach so, du schreibst also Funktionsdefinitionen so, dass sie sich von ihrem explizit vorhandenem Prototyp unterscheiden.
Na dann viel Spaß, selbst wenn du deinen Compiler überredet bekommst, hast du immer noch inkompatible Funktionstypen vorliegen.
-
Da muss ich nichts überreden, die sind nämlich kompatibel.