Hallo zusammen, kann man den gcc so einstellen, dass er das Fehlen eines Prototypen als Fehler und nicht als Warnung behandel (ausgibt)?
Probier's mal mit "-Werror=missing-prototypes".
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'
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.
Ich verstehe es auch nicht recht. Jetzt macht er genau das wonach Du gefragt hast.
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.
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."
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.
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.
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.
Und wie wärs mit der option -penedantic oder wie die heißt?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.