PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : void und int



1udo1
06.02.2009, 13:37
Hallo,

die Funktion


#incude<avr/io.h>

int main(void)
{
DDRA=0xFF;

while(1)
{
PORTA^=0xF;
}
}


gibt doch keinen Wert zurück und empfängt auch keinen Wert.

Warum kommt die Fehlermeldung


"warning: return type of 'main' is not 'int'"


wenn ich schreibe


void main(void)

Es geht mir hier nur um das Verständnis:

Warum muss die main-Funktion mit Typ integer deklariert werden? Sie ist doch void. Es gibt doch gar keinen Return?!

In den Tutorials habe ich bisher keine Erklärung gefunden.


Udo

uwegw
06.02.2009, 13:59
http://www.mikrocontroller.net/topic/124748#new

cipher
06.02.2009, 14:07
Hi!

"main" ist bei C immer die Funktion, die nach dem Laden des Programms ausgeführt wird.
"int main(...)" ist hier meines Erachtens ein Vermächtnis von "richtigen Rechnern" (die Controller-Community mag mir diesen Ausdruck verzeihen) und macht nur dann wirklich Sinn, wenn das Programm von einem Betriebssystem aufgerufen wird.

Bei allen Betriebssystemen liefert ein Programm bei seiner Beendigung (= Verlassen von main) einen Exit-Code, der dem Aufrufer (z.B. Shell unter Unix) mitteilt, ob das Programm einen Fehler produziert hat (evtl auch welcher) oder ob der Programmlauf normal war.
In Deinem Fall müsstest Du einfach am Ende von main() "return 0;" einfügen. Ohne Betriebssystem sollte das Programm sowieso nie aus main() rauslaufen, da man sonst das Verhalten des Systems nicht mehr vorhersagen kann (Controller springt irgendwo in den Speicher und führt irgendwelche Befehle aus, die zufällig dort im Speicher stehen)

Ich hoffe, das konnte Dir ein bisschen weiterhelfen. Bei Fragen einfach fragen!


Viele Grüße,

Markus

1udo1
06.02.2009, 15:29
Danke für diese Erklärung. Wenn man die Zusammenhänge kennt, erleichtert es weitere Tutorials zu verstehen.

Udo