@@MudGuard:
Das wäre mit var Monatsnamen = ["", "Januar", /* ... */ "Dezember"]; nicht minder einfach.
Es gab Zeiten, da war Speicherplatz knapp.
"" nimmt nicht allzuviel Platz ein. ;-) Nee, ist schon klar, wir reden von einer Datenstruktur, wo jedes Arrayelement gleich groß ist, also die Größe des längsten Monatsnamen haben muss, für Deutsch also 9 Bytes – au weia! – (bzw. sogar 10 für '\0' am Ende).
Dennoch ist das überhaupt kein Argument. Man kann ja auch das Array mit Monatsnamen = ["Januar", /* ... */ "Dezember"] füllen, die Monate sinnvollerweise von 1 bis 12 zählen und die Umrechnung der Indizes 1..12 auf 0..11 in dem Moment machen, wo man wirklich auf das Array zugreift: Ist also bspw. Monat = 5, holt man sich aus dem Array Monatsnamen[Monat - 1] und bekommt "Mai".
Eine andere Möglichkeit wäre (wir reden ja von C), den Zeiger auf das Array nicht auf das erste Element zeigen zu lassen, sondern auf ein gedachtest nulltes. (An der Stelle können irgendwelche andere Daten im Speicher stehen; man greift ja nie auf Monatsnamen[0] zu.) So wird kein Speicherplatz verschenkt und es ist auch keine Dekrementierung des Index erforderlich.
Also nicht einmal die Umwandlung der Monatsnummer in den Monatsnamen ist ein schlüssiges Argument, die Monate von 0 bis 11 durchzunumerieren.
Außerdem wandelt man meist gar nicht die Nummer in den Namen um, sondern gibt den Monat numerisch an. Und dann eine Addition von 1 durchführen zu müssen, weil man intern mit unsinnigen Daten rechnet, ist schon reichlich blöd.
Es existiert bereits eine allgemein bekannte und genutzte Zuordnung*
1 ↔ Januar
2 ↔ Februar
...
12 ↔ Dezember
Ich bin immer noch der Meinung: Es war ein Griff ins Klo, in Programmiersprachen eine andere Zuordnung einzuführen. Es bringt keine wirklichen Vorteile, stiftet aber haufenweise Verwirrung.
Guckst Du dagegen beim Wochentag (der benannt und üblicherweise nicht numeriert ist)
Da irrst du. Auch beim Wochentag existiert bereits eine Zuordnung:
1 ↔ Montag
2 ↔ Dienstag
...
7 ↔ Sonntag
Diese wird bereits in Fahrplänen und Flugplänen allgemein genutzt, da brauch ich gar nicht erst ISO 8601 anführen.
Es ist auch nicht so, dass ich generell was dagegen hätte, bei 0 anfangen zu zählen. Aber bitte dort, wo es sinnvoll ist.** Bei Monaten (und auch bei Wochentagen) ist dies nicht der Fall, da schon eine andere Zählweise weithin geläufig ist.
Live long and prosper,
Gunnar
*) Oder zwei. Die andere, veraltete
1 ↔ März
2 ↔ April
...
12 ↔ Februar
erkennt man noch an den nicht nach Kaisern etc. umbenannten Monaten
7 ↔ September
8 ↔ Oktober
9 ↔ November
10 ↔ Dezember
**) Bei Zahlenfolgen gebe ich das n-te Element einer arithmetischen auch lieber als [latex]a_n = a_0 + n d[/latex] und das einer geometrischen als [latex]g_n = g_0 q^n[/latex] an denn als [latex]a_n = a_1 + (n - 1) d[/latex] bzw. [latex]g_n = g_1 q^{n - 1}[/latex].
--
Flughafen in Tempelhof
findet jeder Hempel doof.