Forum: Mikrocontroller und Digitale Elektronik "implicit declaration of function" als Error ausgeben


von Kalli L. (knl)


Lesenswert?

Hallo zusammen,

kann man den gcc so einstellen, dass er das Fehlen eines Prototypen als 
Fehler und nicht als Warnung behandel (ausgibt)?

von R. M. (rmax)


Lesenswert?

Probier's mal mit "-Werror=missing-prototypes".

von Kalli L. (knl)


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'

von R. M. (rmax)


Lesenswert?

Der gcc macht genau das, wonach Du gefragt hast. ;)

Wenn das nicht das ist, was Du wolltest, mußt Du Deine Frage vielleicht 
nochmal anders formulieren oder ein Beispiel machen, für welchen Fall Du 
einen Error bekommen willst.

von Huch (Gast)


Lesenswert?

Ich verstehe es auch nicht recht. Jetzt macht er genau das wonach Du 
gefragt hast.

von Karl H. (kbuchegg)


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.

von R. M. (rmax)


Lesenswert?

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."

von Karl H. (kbuchegg)


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.

von Huch (Gast)


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.

von Karl H. (kbuchegg)


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.

von Terminus (Gast)


Lesenswert?

Und wie wärs mit der option -penedantic oder wie die heißt?

von R. M. (rmax)


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. ;)

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
Noch kein Account? Hier anmelden.