"implicit declaration of function" als Error ausgeben

OP #2046873
Lesenswert?
• ▲
▼
Schon nicht schlecht,
aber leider fliegt mir jetzt das Framework des AVR32 um die Ohren:

Beispiel:
in der Headerdatei
1
extern __inline__ void usart_reset_status(volatile avr32_usart_t *usart)
2
{
3
  usart->cr = AVR32_USART_CR_RSTSTA_MASK;
4
}

error: no previous prototype for 'usart_reset_status'
#2046902
Lesenswert?
• ▲
▼
Na ja.
Ich finde es schon ein wenig unverfroren vom Compiler eine vorhandene 
inline Funktion als 'missing Protoype' zu markieren.

Eine Funktionsdefinition ist ja schliesslich ihr eigener Protoyp.

Wobei

"extern __inline__"

ja wohl ziemlich sinnlos ist.
Entweder extern oder inline. Aber nicht beides.
Wobei das 'extern' bei Funktionen sowieso entbehrlich ist. Braucht kein 
Mensch. Der Compiler kann immer Funktionsdefinition von 
Funktionsdeklaration anhand des Aufbaus unterscheiden.

Also schmeiss es mal probehalber raus.
#2046921
Lesenswert?
• ▲
▼
R. Max schrieb:
> Ist aber genau so dokumentiert:
>
> "This warning is issued even if the definition itself provides a
> prototype.  The aim is to detect global functions that fail to be
> declared in header files."


Nach dem 5. mal lesen hab ich dann sogar verstanden, was das Ziel ist. 
:-)

Was bleibt noch

* Einen anderen Compiler switch finden, der besser passt
* Den Compiler Switch: "treat warnings as errors" aktivieren
  (Das ist sowieso meistens nicht schlecht)
* In die Header Files vor die Funktion noch einen Protoyp
  einschieben.
Gast #2046924
Lesenswert?
• ▲
▼
Hm. Könnte man drüber streiten. Ich schmeiss mal n Salzburger Nockerl.

Eine Funktionsdefinition ist ja doch was anderes als ein Prototyp. Wenn 
die Definition ausftaucht ohne vorherigen Prototyp halte ich das genau 
genommen genau für den Fall den die Fehlermeldung meint.

Hm.
#2046943
Lesenswert?
• ▲
▼
Huch schrieb:

> Eine Funktionsdefinition ist ja doch was anderes als ein Prototyp.

Dann siehst du das anders als der C-Standard :-)

Eine Definition ist immer auch gleichzeitig eine Deklaration

> Wenn
> die Definition ausftaucht ohne vorherigen Prototyp halte ich das genau
> genommen genau für den Fall den die Fehlermeldung meint.

Die Fehlermeldung möchte ganz was anderes erreichen:
Sie hat sich auf die Fahnen geheftet Funktionsleichen zu finden, für die 
es keinen Protoypen mehr im System gibt und die daher nicht gefunden 
werden können, weil sie nirgends mehr verwendet werden und damit einfach 
nur Speicher verbrauchen aber für nichts gut sind.
#2046961
Lesenswert?
• ▲
▼
Es geht wohl eher um Funktionen, die mangels Prototyp außerhalb der 
Datei, die sie definiert, nicht sichtbar sind, was aber nicht unbedingt 
bedeutet, daß sie nutzlos sind, sondern erstmal nur, daß ihnen ein 
"static" fehlt.

Wenn sie tatsächlich nirgends verwendet werden, wird sich nach der 
Änderung in static -Wunused-functions zu Wort melden. ;)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.