005
25.08.2003, 14:30 Uhr
virtual
Sexiest Bit alive (Operator)
|
Genau wie es eine DIN (Deutsche Industrie Norm) gibt, gibt es auch ISO (=International Standardisation Origanisation) und ANSI (=American National Standards Institute). All diese Institute normieren alles: Schrauben, Gullideckel, Qualitätsnormen, usw. Und eben auch Programmiersprachen.
Bei Programmiersprachen (um die geht es ja hier) ist es zum Glück inzwischen so, daß die Normen International sind. Dh es gibt eine Internationale Norm für die Programmiersprachen C und C++, die auch in die entsprechenden nationalen Normen übernomen worden sind. Historisch Bedingt redet man häufig von ANSI C und ISO C++, obwohl das inhaltlich irreführend ist: auch das ANSI C ist eigentlich eine ISO Norm. Das zur Einleitung.
Nun sollte man sich vergegenwärtigen, für was diese Norm überhaupt gut ist: Die Programmiersprachen laufen auf nahezu jeder Rechnerarchtiktur. Deshalb kann die Norm auch nur die Bestandteile normieren, die allen Rechnern gemeinsam sind; man trifft sich also auf den kleinsten gemeinsamen Nenner. So sind Fenster, Dateibäume, Netzwerkkomponenten usw. nicht auf allen Rechnern vertreten, daher nicht bestandteil von ISO C/C++. Aber dennoch ist diese Norm sehr wichtig, weil sie festlegt, was die Programmiersprache an sich können muß (das ist wohl das wichtigste, denn ein Fenster zeichnen ist eigentlich nur der Aufruf einer Routine und damit nichtmehr direkter Bestandteil der Sprache) und einige Routinen, die zum Minimalkonsens gehören (zB string operationen, einfache Dateiein/ausgabe usw.).
Würde es die Norm nicht geben, würde jeder Compiler Hersteller sein eigenes C machen (Microsoft ist darin ein ganz ganz "großer Meister"), so daß es nachher nahezu unmöglich wäre, über Software zu schreiben, die von unterschiedlichen Compilern oder gar auf unterschiedlichen Betriebssystemen Funktioniert. Ein negatives Beispiel zu dieser Punkt: Folgender Code ist bei einem VC legal, nach C++ Standard allerdings illegal:
C++: |
for(int i=0; i<17; ++i) { if (something) break; } if (i==17) printf("Schleife durchgelaufen!");
|
Folgender Code funktioniert nur unter VC, weil dort die "erweiterung" reingebaut wurde, daß ein durch ein for gescoptes i auch nach der Schleife noch ansprechbar sein soll. Kann man zwar über Kommndozeilen Option deaktivieren, beim VC, allerdings funktionieren dann wesentliche Header der VC nicht mehr. Andersherzum funktionieren ISO C++ Sourcen dann natürlich auch nicht mehr mit dem VC:
C++: |
for(int i=0; i<17; ++i) { } for(int i=0; i<17; ++i) { }
|
Bei der zweiten Schleife kotzt der VC (natürlich zu unrecht), daß i bereits deklariert sei. Ich möchte garnicht wissen, wie oft ich mich in der Vergangenheoit mit solchem Müll beschäftigen mußte, weil es ein paar Besserwisser aus Redmond so wollten. Naja: zeigt jedenfalls ziemlich deutlich, wie scheiße Compiler sein können, die sich nicht an Standards halten... (wenn dann noich der Editor der IDE einem verbietet, daß @ Zeichen zu drücken, dann schmeiß ich den Kram eh in Müll. BTW: Ham die das inzwischen gefixt?) -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 25.08.2003 um 14:34 Uhr von virtual editiert. |