mikrocontroller.net

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


Autor: Kalli L. (knl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

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

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier's mal mit "-Werror=missing-prototypes".

Autor: Kalli L. (knl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon nicht schlecht,
aber leider fliegt mir jetzt das Framework des AVR32 um die Ohren:

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

error: no previous prototype for 'usart_reset_status'

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Huch (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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."

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Terminus (Gast)
Datum:

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

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.