PICianer schrieb:
> Karl Heinz schrieb:
>> Was stört dich daran.
> Ich dachte, dass ich dann zwei Funktionen hatte, eine für char die
> andere für const char. Jetzt sehe ich aber, dass ich der Funktion die
> const cahr* erwartet ohne Warnung ein char* übergeben kann. Wieso geht
> das und umgekehrt nicht?
Das const bedeutet an dieser Stelle ja nicht, dass du nur konstante
Texte ausgeben kannst. Ein const in der Argumentliste bedeutet an dieser
Stelle, dass die Funktion die Zusicherung an den Aufrufer gibt "Ich
werde nicht versuchen, den Text den du mir gibst zu verändern".
Für einen Aufruf ala
1 | LCD_Text( 1, 1, "Hallo" );
|
wäre das eine notwendige Voraussetzung, weil "Hallo" als Stringliteral
ja nicht per Programm verändert werden darf. Daher sollte die Funktion
auch genau diese Zusicherung machen.
Für einen Aufruf ala
1 | char str[] = "Hallo";
|
2 | LCD_Text( 1, 1, str );
|
ist die Zusicherung zwar nicht notwendig, es ist aber trotzdem für den
Aufrufer gut zu wissen, dass nach Aufruf der Funktion in str nach wie
vor der String "Hallo" unverändert drinnen stehen wird.
So 'in a nutshell'
> Wieso geht das und umgekehrt nicht?
Weil es Dinge gibt, die von Haus aus const sind und das auch bleiben
müssen. Wenn eine Funktion sich so verhält, dass sie das warauf der
Pointer zeigt nicht verändert, dann ist das gewährleistet.
Gibst du der Funktion umgekehrt aber etwas, das die Funktion verändern
könnte, wenn sie wollte, die Funktion macht aber genau das nicht (das
Verändern), dann passiert weiter nichts schlimmes.