Seite 1 von 1
Ganz am Anfang...
Verfasst: So Feb 16, 2014 4:41 pm
von Rennsteig
Hi zusammen!
Jetzt, da das WS und damit die Prüfungszeit fast rum ist, habe ich endlich Zeit gefunden mich mit C auseinander zu setzen. Nun, nach 10 min habe ich das erste, für euch mit Sicherheit ziemlich banale, Verständnisproblem und hoffe darauf, hier eine Erklärung zu bekommen.
Wärend
einen Fehler produziert, ist bei
alles in Butter. Wo genau liegt, aus Sicht des Compilers, der Unterschied?
Grüße
Re: Ganz am Anfang...
Verfasst: So Feb 16, 2014 4:57 pm
von Xin
Es gibt Sprachen, bei denen geht das(*). Andere Sprachen, wie C/C++, C# oder Java verlangen ein strukturelles Grundgerüst. C verlangt hier die Funktion main(). Die Funktion main() wird vom Betriebsystem gerufen. Ausdrücke und Statements (xy = 1) dürfen in C nicht global stehen, sondern müssen in einer Funktion stehen - und main() ist halt die Startfunktion.
(*) Beispiele sind in der Regel Skriptsprachen wie Python oder PHP, aber auch Pascal/Delphi.
Ich entwickle eine eigene Programmiersprache (wenn ich denn mal Zeit dafür habe ...) und habe vor 10 Jahren C-Tutorien gegeben. Weil man diese Grundstruktur nunmal auch erst unterrichten muss, gehe ich das ähnlich an.
Re: Ganz am Anfang...
Verfasst: So Feb 16, 2014 5:11 pm
von cloidnerux
Hi zusammen!
Hi und Willkommen im Forum
Das Problem ist ein Strukturelles: Du schreibst ein Programm, eine Arbeitsanweisung für den Computer. Aber wo soll das ganze beginnen? Welches ist die erste Anweisung? Die erste die man ab Anfang einer Datei findet, eine Anweisung an einer Bestimmten stelle oder soll man doch ein Keyword verwenden?
Wie Xin schon geschrieben hat, viele Skriptsprachen fangen einfach von Anfang an und gehen deinen Code durch und führen ihn aus. Das bringt aber viele Probleme mit sich, wenn man größere Programme schreibt, es ist unflexibel. Man macht einen Fehler und auf einmal passiert irgendwas merkwürdiges.
Deswegen hat man sich bei Sprachen wie C/C++, C#, Java auf ein Keyword geeinigt, besser gesagt den Programm-Einstiegspunkt, den man einfach "main" nennt(Das kann man, wenn man will umstellen, das bringt einem aber meistens nichts).
"main" muss eine Funktion sein.
Und genau ist das, was dein Compiler dir anmerkt: Er weiß nicht wo er beginnen soll.
Re: Ganz am Anfang...
Verfasst: So Feb 16, 2014 5:25 pm
von Rennsteig
Das ging ja schnell! Und ausführlich, danke!
Ok, grundsätzlich echt einleuchtend. Aber
läuft so durch. Ist das dann kein Ausdruck oder Statement mehr?
Re: Ganz am Anfang...
Verfasst: So Feb 16, 2014 5:34 pm
von cloidnerux
läuft so durch. Ist das dann kein Ausdruck oder Statement mehr?
Das Anlegen von Variablen mit direkter Initalisierung ist überall möglich.
Code: Alles auswählen
#include <stdio.h>
int a = 0; //Hier darf man Variablen anlegen, diese sind dann Global
a = 0; //!Hier wird dein Compiler scheitern, denn das ist nicht erlaubt
int main()
{
int b; //Hier lege ich eine lokale Variable an
b = 0;
return 0;
}
Das Anlegen einer Variable ist keine Operation. Wenn im Zuge der Initialisierung ein Wert angegeben wird, dann ist das in Ordnung. Weist du aber dann einer Variable irgendeinen Wert zu, ist das eine Operation, etwas was ausgeführt wird. Das ist in C nur innerhalb von Funktionen möglich. Man kommt um die main-Funktion nicht drum herum
Deswegen sieht das Hello World auch so aus:
Code: Alles auswählen
#include <stdio.h>
int main()
{
printf("Hallo Welt!\n");
return 0;
}
Re: Ganz am Anfang...
Verfasst: So Feb 16, 2014 6:06 pm
von Rennsteig
Ich wollte um die main-funktion auch nicht rumkommen, sondern verstehen was "der" da macht
Erfahrungsgemäß ist es nur die zweitbeste Wahl, Fragen offen zu lassen

.
Danke nochmal, bis zum nächsten Mal...