Was bedeutet dieser Warnung?

Gast #100239
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.
Gast #100240
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
Gast #100242
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...
Gast #100244
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.