Hallo, mein Compiler gibt mir immer folgende Warnung aus: labornetzteil.c:32: warning: implicit declaration of function `interrupt_init' Programmiert ist das mit WinAVR. Die unterfunktion sieht folgendermassen aus: void interrupt_init(void) { MCUCR = 0x09; PCMSK1 = 0x7c; GICR = 0x50; sei(); } aufgerufen habe ich sie so: interrupt_init(); Die Funktion ist in einer extra C-Datei und wird im Main aufgerufen. Danke schon mal für eure Hilfe.
Hi du machst die Funktion interrupt_init(); dem Compiler nicht bekannt wenn er die main-Funktion übersetzt. Du solltest zu jeder externen c-Datei die du erstellst eine sog. Header-Datei erstellen in der du alle Funktionsprototypen der Funktionen reinschreibst die du ausßerhalb dieser c-Datei verwenden willst. In deinem Fall also etwa sowas in die Headerdatei: void interrupt_init(); Die Headerdatei bindest du dann mit #include "xxx.h" in deine main.c ein. Matthias
Hi!
>void interrupt_init();
Ich würde hier nicht auf das zweite "void" verzichten. Ich glaube,
diese schreibweise stammt aus C++, bei dem es so explizit erlaubt ist.
So weit ich weis, ist diese Schreibweise für stdc allerdings falsch,
die meisten Compiler tolerieren das aber...
void interrupt_init(void);
Gruß,
Patrick...
Hi stimmt. Der GCC kommentiert das mit einer Warning. Also immer schön aller Parametertypen in der Parameterliste angeben. Matthias
Es ist übrigens nicht streng genommen falsch, aber eher `deprecated'. Wenn man in C++ eine Funktion ... foo(); deklariert, dann ist dies äquivalent zu ... foo(void); Wenn man das in C macht, wird hingegen ausgedrückt, daß die Funktion foo() `old style parameter lists' (sogenanntes K&R C) benutzt, d. h. die Anzahl der Argumente für den Aufruf der Funktion wird durch die Deklaration nicht festgelegt. Das war bis zu C90 (ANSI-C 89) die übliche Deklarationsweise für Funktionen. Der Compiler hatte keine Chance, Anzahl und Typ der Parameter zu überprüfen oder gar ggf. notwendige Typkonvertierungen vorzunehmen. Diese Form wird lediglich für Rückwärskompatibilität mit altem Code noch unterstützt, in neuem Code sollte man sie generell vermeiden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.