Hallo,
die Funktion
Code:#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
Es geht mir hier nur um das Verständnis:Code:void main(void)
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
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
Danke für diese Erklärung. Wenn man die Zusammenhänge kennt, erleichtert es weitere Tutorials zu verstehen.
Udo
Lesezeichen