Hallo,
Meinens Wissens nach ist es auch unter vielen anderen Pascal-Dialekten so. Bei Turbo Pascal war die Längenangabe eine Byte-Variable. Daher auch nur 255 Zeichen. Manch andere verwenden dafür Integer und dann hat man schon deutlich mehr.
Weiter unten kritisierst Du die Implementierungsabhängigkeit von Datentypen bei C, bei Pascal ist das für Dich in Ordnung, oder wie?
Das mit der Länge war ja nur ein Beispiel. Nullterminierende Zeichenketten haben ja noch andere Nachteile. Beispielsweise Copy&Paste. Was ist wenn ein Paste über die reservierte Länge hinausgeht. Was ist wenn das Ende-null durch irgendwas vorloren geht. Das Konzept ist einfach unsicherer und schwerer zu handhaben.
C wurde an sich dafür entwickelt, um Betriebssysteme schreiben zu können, ohne alles in Assembler zu machen, damit dieses Betriebssystem möglichst einfach auf eine neue Hardware portiert werden kann. Irgendwie ist imho C so ein Mittelding zwischen Assembler und Hochsprachen wie Pascal oder Fortran oder ähnlichem.
Da Betriebssystem-Funktionen in der Regel sehr oft aufgerufen werden macht es sinn, diese so performant wie möglich zu machen. Wenn nun aufwendige Prüfungen auch dann jedesmal gemacht, wenn in einem bestimmten Code-Abschnitt die Prüfbedingungen garantiert nie verletzt werden können, dann leidet die Performance darunter. Daher muß man sich um Prüfungen selbst kümmern, wenn man sich unsicher ist, ob da nicht was komplett falsches auch daherkommen kann.
Ein weiteres Ziel bei der Entwicklung von C war, sie möglichst einfach zu gestalten, was die Core-Syntax betrifft, damit die Erstellung eines Compilers für eine neue Plattform so einfach wie möglich ist. Alles was nicht direkt in der Sprache notwendig ist, wurde in die Bibliotheken verlagert.
Ausserdem, wozu soll ich denn File-Handling-Funktionen in eine Sprache einbauen, wenn das OS auf dem das Programm dann läuft vielleicht gar keine Dateien kennt?
Warum müssen Prozeduren einen Datentyp (void) zurückgeben?
Weil es in C so etwas wie Prozeduren gar nicht gibt. Es gibt nur Funktionen, die nichts (void) zurückliefern;-)
Warum kann man bei einer mit void deklarierten Funktion überhaupt ein Rückgabewert angeben ohne das der Compiler meckert?
Dann verwendest Du anscheinen keinen Ansi-Compiler.
Der Operatorreihenfolge ist ungeschickt gewählt. Beispiel:
int a;
a=10;
--x=(++x)--;
Na gut, nicht alles was möglich ist, ist auch sinnvoll. Das von Dir gewählte Beispiel hätte ich nie und nimmer geschrieben.
Und apropos Operator: Ganz krank ist ja nun dieses = für eine Zuweisung und == für Vergleich. Ich möchte nicht wissen, wie oft Programmierer darüber geflucht haben wenn in vielen unbeabsichtigen Verwechslungsfällen der Compiler keine Fehlermeldung liefert. --> Krankes Konzept da nicht am Menschen orientiert.
Die meisten Compiler die ich kenne, geben eine Warning aus, wenn innerhalb von Bedingungen Zuweisungen erfolgen. Das aber nur so nebenbei.
Ich persönlich fluche eher, weil ich in Pascal bei jeder Zuweisung := verwenden muß, nur damit ich bei den, viel seltener benötigten, Vergleichen ein einfaches = verwenden kann. Da gefällt mir das C-Konzept viel besser (genauso wie es anscheinend auch den Entwicklern von praktisch allen Sprachen, die C-ähnliche Syntax verwenden genug gefallen hat, um es zu übernehmen).
Auch die Mehrfachverwendung von Schlüsselwörtern mit jeweils komplett unterschiedlicher Bedeutung macht es einem nicht gerade einfach (beispielsweise: static).
Da hast Du sicherlich recht, allerdings ist dieser Makel auch in vielen anderen Sprachen anzutreffen.
Viele Dinge in C sind nicht geregelt und implementierungsabhängig (Umfang von Datentypen usw).
Das stimmt so nicht. Es ist sehr wohl geregelt, man muß sich nur die plattformspezifische Implementierung genau ansehen.
... Ich schaue hin und weiss sofort: der Array ist 100 Zeichen
lang, erstes Byte liegt bei 0 und letztes Byte liegt bei 99.
Aber nur aufgrund impliziten Wissens.
Na gut, implizites Wissen um eine Programmiersprache ist doch Voraussetzung für eine halbwegs erfolgreiche VErwendung derselben, oder?
Ok aber darauf will ich jetzt nicht ewig herumreiten. Ich habe auch kein Problem mit dieser Definition von Feldern. Damit komme ich ganz gut klar. Was mir weniger gefällt ist eben nur, daß man keinen Startwert angeben kann.
Imho ist die Festlegung des Starwertes auf 0 einfacher, da man sich ja nur genau eine Regel merken muß.
Nicht jeder benutzt IDEs. Ich persönliche z. B. benutze keine IDE.
Da kann ich nur sagen: Selbst schuld.
Wenn Du Dir das Leben unnötig schwer machst, dann ist das Dein Problem. Schieb es dann aber nicht auf die Sprache wenn Dir dann irgendwas fehlt.
Was hat eine eventuell vorhandene IDE mit Sprachkonzepten zu tun? Mir fällt auf die Schnelle keine Sprache ein, die unbedingt eine IDE benötigen, sofern der Quelltext auch als Textdatei gespeichert werden kann.
Ich persönlich kann sowohl mit als auch ohne IDE recht gut leben. Einerseits finde ich auch, dass einem IDE'S das Leben zwar erleichtern können, andererseits verstehe ich Christian auch recht gut, weil verschiedene IDE-Systeme dazu neigen, den Programmierer zu bevormunden. Ausserdem verhindern sie oft, dass Programmierer die Sprache besser verstehen lernen.
Aber jedem das Seine und mir das Meine;-)
Abschließend möchte ich noch etwas anmerken, das bis jetzt so noch nicht richtig rübergekommen ist.
Ich habe persönlich keine wirkliche 'Lieblingssprache' (deshalb bin ich wahrscheinlich auch in keiner ein sog. Spezialist). Gute Programme kann man an sich in jeder Sprache schreiben, die ich bis jetzt verwendet habe (und das sind auch schon einige). Allerdings fällt mir auch keine Sprache ein, in der man nicht absoluten Bockmist zusammenschustern kann. So gut kann kein Sprachkonzept sein, dass es nicht von einem mehr oder weniger kranken Geist umgangen werden kann.
Wichtig ist nur, sich auf eine Sprache und deren Eigenheiten einzulassen. Will man in der einen Sprache alle Konzepte einer anderen Sprache umsetzen, dann ist man in der Regel auf dem falschen Weg.
Hier nur ein Beispiel: Als ich damals mit Perl begonnen habe, da habe ich vorher praktisch ausschließlich in C programmiert. Anfangs habe ich einige Konzepte, die ich in C verwendet habe, in Perl vermisst und versucht diese nachzubilden. Im Laufe der Zeit habe ich dann immer mehr von Perl verstanden, was dazu geführt hat, das meine Scripts immer mehr richtige Perl-Scripts waren und weniger C-Programme, die halt irgendwie in Perl umgesetzt sind.
Ähnliches erlebte ich auch, als ich zum ersten Mal von einem CAD-System zu einem anderen wechselte. Später, so nach dem dritten oder vierten, war es mir schon egal, welches Teil mir vorgesetzt wurde. Irgendwie kommt man zur Erkenntnis, dass der Satz 'Kennt man eines, kennt man alle' doch nicht so aus der Luft gegriffen ist;-)
Genauso verhält es sich auch mit den Programmiersprachen. Man sollte sich halt nur nicht in eine Sprache 'verlieben'.
Grüße
Klaus