ANSI/ISO C++
-
Hallo
Mich würde mal interessieren was genau C++ ansich ist, bzw. was die Programmiersprache bildet. Meiner Meinung nach einfach gesagt besteht die Programmiersprache C++ aus den Schlüsselwörtern und den Operatoren. Nicht mehr nicht weniger. Doch das mächtige an der Sprache ist, wie man diese zwei Komponenten einsetzt und was sie alles leisten können. Das Schlüsselwort class dient ja z.B. zum deklarieren einer klasse, diese wiederum hat viele Methoden und Attribute die wiederum dies und das tun.
Also einfach gesagt, steckt hinter den Schlüsselwörtern sowie den Operatoren eine tiefe Philosophie und Logik die Bjarne Stroustrup sich ausgedacht hat. Die Kombination dieses ganzen, also das, was schlussendlich den Syntax der Sprache bildet, nennt man dann eben „Programmieren“. Der C++ Standard gibt gewisse Sachen vor, wie sie zu übersetzen sind und wie sie später als Assembler Code ablaufen müssen.
Der Programmierer kann ja anhand der Schlüsselwörter und Operatoren beinahe alles tun was er will. Klassen, Methoden, Funktionen, Variablen etc. kann er ja nach belieben deklarieren. Der Zusammenhang des ganzen bildet ja dann schlussendlich die Programmiersprache. Der teil mit den include Dateien (STL etc) hat ja in erster Linie direkt nichts mit der Programmiersprache zu tun, sie dienen lediglich als hilfsmittel und sind ja meines Wissens ja selbst in C++ geschrieben, also mit C++ Schlüsselwörtern, Operatoren und einen Riesen Haufen Komplexität sowie Logik das den Syntax bildet. Könnte man das ganze „einfach“ gesagt so ausdrücken? Versteht mich jetzt nicht falsch, mir ist klar das dahinter eine grosse und komplexe Philosophie steckt, aber grundsätzlich stimmt es ja eigentlich soweit oder? Als Beispiel:
int main { char *anyvar; return 0; }Braucht absolut keine einzige include Datei und besteht genau aus zwei C++ Schlüsselwörtern und vom Programmierer deklarierte funktions- und Variablennamen. Der C++ Standard legt nun in diesem kleinen Beispiel fest wie der Code exakt in Assembler Code kompiliert werden muss. Z.B. weiss nun der Prozessor dass er einen einsprungs call hat (main) und das im Speicher ein bereich mit n Bytes belegt werden muss und anschliessend das Programm wieder beendet werden muss. Versteht ihr mich? Ich befasse mich eben auch mit dem ganzen Hintergrund und möchte einfach alles wissen was den Zusammenhang der Komplexität umfasst.
-
Der Standard legt das Verhalten fest, nicht wie etwas passiert. Der ASM-Code ist ja abhängig vom System, und C++ ist ja platformunabhängig, daher lassen sich solche Aussagen gar nicht treffen.
Es ist z.B. auch nicht vorgeschrieben dass std::list als verkettete Liste implementiert werden muss.
Gruß
-
Ja ok. Aber trotzdem stimmt das ansonsten im gross und ganzen? Die sprache bildet sich aus den vorgegebenen Schlüsselwörtern und Operatoren. Der Syntax bildet sich schlussendlich aus dem ganzen code, den der Programmierer niederschreibt.
-
Das stimmt schon so ungefähr, was du schreibst. Trotzdem gibt es aber einige Standardheader, die Funktionen mit definiertem Verhalten beinhalten. Mit diesen darf der Compiler auch machen, was er will (z.B. durch Intrinsics ersetzen).
-
ich finde die beschreibung völlig korrekt, auch wenn die sache mit der "tiefen philosophie und logik" etwas hoch gegriffen ist.
die eigentliche sprache c++ besteht nur aus funktions, klassen-, variablen- etc deklarationen, if, while, for etc. befehle wie "cout<<"hallo";" sind nicht mehr teil der eigentlichen sprache c++, sondern in c++ geschriebene funktionen, klassen variablen etc, deren deklarationen in c++-quelltexten stehen, die mit #include eingebunden werden.
allerdings definiert der ansi-c++-standard nicht nur die eigentliche sprache selbst, sondern auch eine standardbibliothek. die enthält dann <vector>, <iostream> etc.
kurz: die eigentliche sprache ist das, was der compiler direkt versteht. die bibliothek ist das, was der compiler an code von außen inkludiert, hinzulinkt.
-
So einfach, finde ich, kann man es sich nicht machen. Man bedenke nur die Verbundenheit von <type_info> und typeid sowie die globalen Implementierungen von operator new und delete.