Ich habe mich noch ein bisschen weiter mit const beschaeftigt und dabei das in der Wikipedia gefunden:
Dennis Ritchie hat geschrieben:
"Let me begin by saying that I'm not convinced that even the
pre-December qualifiers ('const' and 'volatile') carry their
weight; I suspect that what they add to the cost of learning and
using the language is not repaid in greater expressiveness.
'Volatile', in particular, is a frill for esoteric applications,
and much better expressed by other means. Its chief virtue is
that nearly everyone can forget about it. 'Const' is
simultaneously more useful and more obtrusive; you can't avoid
learning about it, because of its presence in the library
interface. Nevertheless, I don't argue for the extirpation of
qualifiers, if only because it is too late.
(`const' ist im Standardisierungsprozess fuer C89 aufgenommen worden. Wie mir scheint hat es seinen Ursprung in den Vorlaeufern von C++.)
Irgendwie verdreht mir die Sache immer noch den Kopf.
Wenn als Parameter ein `const char *dstr' kommt und man nicht casten will, habe ich keinen Weg gefunden bei strtol() bei Parameter eins und zwei den gleichen Pointer zu verwenden.
Dies ist die einzige Form, die unter diesen Vorgaben zu funktionieren scheint:
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
void date2uxtime(const char *dstr) {
char *p;
printf("year: %ld\n", strtol(dstr, &p, 10));
p++;
printf("month: %ld\n", strtol(p, &p, 10));
p++;
printf("day: %ld\n", strtol(p, &p, 10));
}
int main() {
date2uxtime("2021-03-12");
return 0;
}
Dabei wird der Wert, auf den der char-Pointer zeigt gar nicht veraendert. Folglich sollte es eigentlich moeglich sein, als zweiten Parameter einen `const char **' zu uebergeben -- geht aber nicht. Ich meine, man kann die technischen Gruende dafuer sicher irgendwann nachvollziehen, wenn man sich nur lange genug damit auseinander gesetzt hat, aber die Stimmigkeit und Konsistenz, die C sonst zu bieten hat, fehlt mir hier. Wahrscheinlich ist das normal fuer nachtraeglich aufgesetzte Konzepte.
Ich denke, dass ich darum `const' nicht verwende: Die Schoenheit und Eleganz von C geht verloren wenn man sich mit const einlaesst. Und da DMR auch nicht der Meinung war, dass const seine Kosten wert sei, kann ich es ganz beruhigt auch weiterhin meiden.