"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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren