Funktion undefiniert
-
Hallo ,
in meinem Programm für einen Handscanner rufe ich in der main meine Hauptfunktion Steuerung auf. Die anderen Funktionen sind aus einer Header
für de Scanner, also unwichtig.void main(void) { int current_state = 0; int previous_state = -1; while(1) { current_state = ischarging(); if(current_state != previous_state) { previous_state = current_state; switch(current_state) { case 0: printf("\f"); printf("Start mit:\n-Anmelden (ID)"); Steuerung(); previous_state = -1; break; case 1: printf("\f"); printf("Status:\nAngeschlossen\nund Ladend"); break; case 2: printf("\f"); printf("Status:\nAngeschlossen"); break; } } idle(); } }
Deklariert habe ich diese hier...
#ifndef Terminal_h #define Terminal_h int Steuerung(int, int); int ret_start; int erg; #endif
...und definiert hier:
int Steuerung(int ret_start, int erg) { ... return 0; }
Wie kann ich den Fehler (Warnung) wegbekommen:
warning C4013: 'Steuerung' undefined; assuming extern returning intIch hab immer
#pragma warning(disable : 4013)
eingebunden.
Muss ich beim Aufruf der Funktion in main was zurückgeben?
-
-
nein, da der Handscanner sonst die main verlässt und das soll der ja nicht!
-
Erstens solltest du am Anfang des Hauptprogramms (und auch in der Datei, wo deine Funktionen definiert sind) ein #include "Terminal.h" einfügen - dann findet der Compiler auch die Deklaration.
Zweitens benötigt die Funktion Steuerung() zwei Parameter, also darfst du sie nicht ohne Parameter aufrufen (wenn du den oberen Punkt beachtest, wird dich der Compiler als nächstes darauf aufmerksam machen, daß du falsche Parameter verwendet hast).
Drittens hast du in dem Header eine Funktion deklariert und zwei globale Variablen definiert - letztere dürften erstens zu Problemen mit dem Linker führen und haben zweitens nichts mit den Parametern der Funktion zu tun.
Und viertens heißt es "int main()".
-
fevernova schrieb:
nein, da der Handscanner sonst die main verlässt und das soll der ja nicht!
*hzgrwl* das hat damit nichts zu tun, die main endet so oder so, egal ob void oder int. Na ja, deine vllt. nicht, wenn ich mir die endlosschleife ansehe...
-
warum lese ich dann immer folgendes:
void main (void) { while (1) { //An embedded program does not stop and ; //... // never returns. We've used an endless } // loop. You may wish to put in your own //code were we've printed the dots (...) }
-
fevernova schrieb:
warum lese ich dann immer folgendes:
void main (void) { while (1) { //An embedded program does not stop and ; //... // never returns. We've used an endless } // loop. You may wish to put in your own //code were we've printed the dots (...) }
Weil manche Autoren keine Ahnung haben
(lies dir mal den Beitrag durch, den GPC oben verlinkt hat, der erklärt die korrekte Version genauer)
-
Ich hab jetzt ein int main(void) mit return 0!
Wie kann ich die eigentliche Warnung beheben?
So wie jetzt funzt das Programm einwandfrei.
-
fevernova schrieb:
Ich hab jetzt ein int main(void) mit return 0!
Wie kann ich die eigentliche Warnung beheben?
Die sollte eigentlich schon durch CStolls Anweisungen abgedeckt sein... zeig mal den aktuellen Source.
MfG
GPC
-
CStoll schrieb:
fevernova schrieb:
warum lese ich dann immer folgendes:
void main (void) { while (1) { //An embedded program does not stop and ; //... // never returns. We've used an endless } // loop. You may wish to put in your own //code were we've printed the dots (...) }
Weil manche Autoren keine Ahnung haben
(lies dir mal den Beitrag durch, den GPC oben verlinkt hat, der erklärt die korrekte Version genauer)
Jo, z.B. der den Beitrag in der FAQ geschrieben hat. Es wird im Standard zwischen "hosted environments" und "freestanding environments" unterschieden. Der FAQ-Eintrag zeigt dummerweise nur den Fall eines "hosted environments". Bei einem "freestanding environment" (z.B. embedded Zeugs) sieht das ganz anders aus. Da muss es nichtmal "main" heissen. Und da die meisten Sachen in der Kategorie nie aufhören, ausser im absoluten Fehlerfall, muss auch nichts zurückgegeben werden. Somit macht "void main(void)" Sinn.