PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neuling Frage zu gcc



Chaos2k
11-01-2003, 14:10
Hi,
ich bin gerade dabei C zu lernen. So wenn ich nun meine programme mit gcc compiliere, bekomme ich jedesmal die meldung:
warning: return type of 'main' is not 'int'
Warum??
THX für eure Hilfe
Chaos2k

JoelH
11-01-2003, 16:19
naja die Mainfunktion braucht ja auch einen Rückgabe wert, wenn du also dein Programm ordnungsgemäss beendest solltest du es vielleicht mit return 0; machen also




int main()
{
.......
return 0;
}

Chaos2k
11-01-2003, 16:39
Hi also die Progs aus meinenm Buch sind aber so aufgebaut:
void main()
{
anweisungen
}
also int kommt überhaupt nicht vor.
MFG chaos2k

anda_skoa
11-01-2003, 16:54
Das ist noch code aus der Ära vor dem C Standard.

Standardkonforme C Programme haben ein int main.

Ciao,
_

Chaos2k
11-01-2003, 17:00
also das buch ist von '98, seh ich grad, kann ssein das es daran liegt, thx noxhmal

sven1978
11-01-2003, 19:22
Also ich compiliere auch mit gcc und schreibe nur:

main()
{

}
aber:wenn kein rueckgabewert angegeben wird macht das der compiler selber zu int. Also ist es egal.Bei

void main()

duerfte dir das eigentlich nicht passieren weil void "nichts"bedeuted.

Eigentlich duerfte keine meldung kommen.

Chaos2k
12-01-2003, 10:59
kommt aber. Das ist ja das Komische, weil wenn nichts zurückgegeben wird muß der Typ doch nicht int sein :D naja
MFG chaos2k

nickers
12-01-2003, 11:02
Das "void main()" in Deinem Buch liegt nicht am Alter desselbigen, sondern wahrscheinlich daran, daß der Verfasser hauptsächlich in Windows mit VC programmiert und da ist "void main" gängige Praxis. Microsoft hält sich halt ungern an Standards.

anda_skoa
12-01-2003, 11:24
Original geschrieben von sven1978
Also ich compiliere auch mit gcc und schreibe nur:

main()
{

}
aber:wenn kein rueckgabewert angegeben wird macht das der compiler selber zu int. Also ist es egal.


Wenn kein Rückgabetyp angegeben ist, wird immer int angenommen.
Das sieht man auch, wenn man ein include vergisst.
Dann gibt es eine Warnung, dass eine int Funktion "implicit" deklariert wurde.



void main()

duerfte dir das eigentlich nicht passieren weil void "nichts"bedeuted.

Eigentlich duerfte keine meldung kommen.

Natürlich kommt da die Meldung, denn void != int und int muss es sein :)

ciao,
_

anda_skoa
12-01-2003, 11:25
Original geschrieben von Chaos2k
kommt aber. Das ist ja das Komische, weil wenn nichts zurückgegeben wird muß der Typ doch nicht int sein :D naja


Das ist ansich richtig, aber main gibt ja was zurück und darum muss der Typ auch int sein.

Ciao,
_

sven1978
12-01-2003, 11:36
Also weiss net was ihr alle habt.
Bei mir kommt bei gcc kein fehler(Warnung in diesem Fall)

Ich schreibe:
main()
{
}
ich hatte schon bei borland den fall das eine warning kommt

anda_skoa
12-01-2003, 12:09
Original geschrieben von sven1978
Also weiss net was ihr alle habt.
Bei mir kommt bei gcc kein fehler(Warnung in diesem Fall)

Ich schreibe:
main()
{
}
ich hatte schon bei borland den fall das eine warning kommt

Klar, weil du nichts angegeben hast, nimmt der Compiler implizit int an und dass ist auch richitg für main.

Ciao,
_

sven1978
12-01-2003, 12:34
ja schon aber will er dann nicht ein return?

anda_skoa
12-01-2003, 15:00
Nein, bei main wird ein return 0 hinzugedacht, wenn das return fehlt.

Ciao,
_

JoelH
12-01-2003, 16:07
ist aber alles sehr unsauber wie ihr programmiert.

sven1978
12-01-2003, 16:34
Ja wenn das return 0 dazugedacht wird passt es ja das beim compelieren kein warning kommt. Kommt aber auch bestimmt auf den compiler an.

anda_skoa
12-01-2003, 16:58
Original geschrieben von sven1978
Ja wenn das return 0 dazugedacht wird passt es ja das beim compelieren kein warning kommt. Kommt aber auch bestimmt auf den compiler an.

Ich glaube, dass ist im Standard so definiert.

Kann aber nicht schaden, return 0 hinzuschreiben.

Ciao,
_

JoelH
12-01-2003, 17:05
Original geschrieben von anda_skoa

Kann aber nicht schaden, return 0 hinzuschreiben.


vor allem sieht es besser aus :)

anda_skoa
12-01-2003, 17:09
Original geschrieben von JoelH
vor allem sieht es besser aus :)

Vorallem erinnert man sich dann, dass man bei einem Abbruch wegen eines Fehlers, return fehlercode machen kann :)

Ciao,
_

Boron
12-01-2003, 17:10
Ich denke mal, dass es am Besten ist, wenn man es richtig macht und nicht so wie es in irgendeinem Buch steht.

int main()
{
...
return 0;
}

JoelH
12-01-2003, 17:16
Original geschrieben von Boron
Ich denke mal, dass es am Besten ist, wenn man es richtig macht und nicht so wie es in irgendeinem Buch steht.

int main()
{
...
return 0;
}

sagte ich auch schon :)


Original geschrieben von JoelH
naja die Mainfunktion braucht ja auch einen Rückgabe wert, wenn du also dein Programm ordnungsgemäss beendest solltest du es vielleicht mit return 0; machen also




int main()
{
.......
return 0;
}


;) ;)

avuton
14-01-2003, 09:58
na wenn du zum schluss return 0; machst gibst du eine Null zurück, das heißt, dass deine Mani als Rückgabewert auch ein Integer haben muss.
avuton
ansonsten muss es void main()heißen dann darfst du aber auch kein return haben und dann gibt die Funktion nichts zurück

anda_skoa
14-01-2003, 10:09
Original geschrieben von avuton

ansonsten muss es void main()heißen dann darfst du aber auch kein return haben und dann gibt die Funktion nichts zurück

void main kann sie aber nicht heißen, weil es nach dem C Standard int main heißen muss :)

Außerdem kann man auch in einer void Funktion return benutzen, nur halt ohne Parameter.

Außerdem wollte JoelH ja nur darauf hinweisen, dass, auch wenn man bei main das return 0 am Ende weglassen kann, es wesentlich sauberer ist, es hinzuschreiben.

Ciao,
_

Chaos2k
14-01-2003, 16:43
Danke für eure hilfe,
ich machs jetzt so wie sagtet mit in main und return 0, keine Fehler oder sonstiges
THX Chaos2k