- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: implicit declaration NUR ein Warning ???

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076

    implicit declaration NUR ein Warning ???

    Anzeige

    E-Bike
    Hallo zusammen,
    ich wundere mich grad über einem "WARNING" welchen ich jedoch als "ERROR" interpretieren würde.

    Ich habe eine Berechnung, die unter anderem eine Funktion aufruft um einen weiteren Wert zu berechnen,
    diese Funktion habe ich jedoch testweise ausgeklammert.

    Nun "warnt" mich lediglich der GNU Compiler mit "implicit declaration of funnction xxxx"

    Was mich jetzt daran wundert, ist das ich ein Compilat bzw. Hexfile bekomme und mich frage, was er da wohl für einen Code eingesetzt hat.

    Wenn eine aufgerufene Funktion nicht existiert, sollte das nicht ein ERROR sein ?

    Dem ARM-Compiler wird -Wall übergeben.

    Nun die Frage: warum nur Warning, ein sinnvoller Code kann doch nicht generiert werden ?

    bzw. kann man solche Warnings evtl. als "Error" behandeln ? einen Warning wird ja schnell mal ignoriert


    Ich danke Euch schonmal für Infos
    Siro

  2. #2
    HaWe
    Gast
    ohne Code kann man nur spekulieren - es kommt z.B. drauf an, was du mit dem Funktionswert der nicht existenten Funktion machst:
    wird er gar nicht weiterverwendet, schmeißt ihn die Code-Optimierung u.U. von ganz alleine komplett raus, und dann ist es ja kein Fehler... 8-)

    Aber wie gesagt: für genauere Aussagen braucht man den genauen Code...

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Zitat Zitat von Siro Beitrag anzeigen
    bzw. kann man solche Warnings evtl. als "Error" behandeln ?
    Das lässt sich bestimmt über ein #pragma steuern und sollte im User Manual deines Compilers beschrieben sein.
    Mit GCC habe ich zwar nichts am Hut, aber bei XC8 nachgeschaut und ausprobiert:
    Code:
    #pragma warning error 361
    beispielsweise macht aus warning: (361) function declared implicit int
    einen error: (361) function declared implicit int

    Gruß witkatz


    - - - Aktualisiert - - -

    Hier und hier was gefunden zu GCC: es könnte so gehen:
    #pragma GCC diagnostic error "-Wimplicit"
    Geändert von witkatz (09.05.2016 um 15:48 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    erst einmal vielen Dank

    @HaWe: Das gibt Sinn, wenn der Compiler den Code nicht benötigt und rausschmeisst, ist ein Warning auch völlig ausreichend.
    ich glaube daran liegt es, ich probiere grad noch etwas rum

    @Witkatz:
    ja, bei den PIC-Compiler XC8 geht das super, habe ich eben probiert:

    Code:
    #pragma warning error 373
    /* implicit signed to unsigned conversion erzeugt nun einen error (373) */

    Die Warning/Error Steuerung beim GNU habe ich leider noch nicht verstanden, trotz deinem LINK.
    Geändert von Siro (09.05.2016 um 15:20 Uhr)

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    Es ist 'nur' eine Warnung weil man Funktionen und deren Parameter auch nur mit Namen also ohne Datentypen deklarieren darf. Das ist noch ein Relikt aus der K&R-Steinzeit.
    Wenn man das ungeschickter Weise macht, dann werden Funktionsaufrufe standardmäßig mit 'int' für Rückgabewert und Parametern generiert und das kann sich dann beißen, wenn Deine Implementierung intern ganz andere Datentypen erwartet. Sich an dieser Stelle auf Optimierungen zu verlasssen, ist keine gute Idee.
    Letzten Endes mußt Du alle Aufrufe der Funktion, die Du gerade nicht benutzen willst, auskommentieren und nicht einfach nur die Deklaration und/oder Definition. Irgendwo in Deiner Compileunit ist noch ein Aufruf drin, der Dir diese Warnung erzeugt.

    Grüße
    Chris

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Zitat Zitat von Siro Beitrag anzeigen
    Die Warning/Error Steuerung beim GNU habe ich leider noch nicht verstanden, trotz deinem LINK.
    Es sind zwei Links
    Hast du mit #pragma GCC diagnostic error "-Wimplicit" probiert?

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    sorry witkatz, es sind tatsächlich 2 Links.....

    und jetz funktioniert es auch so wie ich das wollte:

    #pragma GCC diagnostic error "-Wimplicit" ist genau die richtige Lösung

    jetzt gibt es auch den gewollten Fehler

    ../src/Regulation.c:871:42: error: implicit declaration of function 'h_flow' [-Werror=implicit-function-declaration]

    Damit ist mein Problemchen gelöst.
    Supi, ich danke euch Allen.

    Siro


    Letzten Endes mußt Du alle Aufrufe der Funktion, die Du gerade nicht benutzen willst, auskommentieren und nicht einfach nur die Deklaration und/oder Definition. Irgendwo in Deiner Compileunit ist noch ein Aufruf drin, der Dir diese Warnung erzeugt.
    Das ist auch ein guter Hinweis botty, ich danke Dir.
    Geändert von Siro (09.05.2016 um 15:54 Uhr)

Ähnliche Themen

  1. implicit declaration NUR ein Warning ???
    Von Siro im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 09.05.2016, 11:23
  2. Fehler warning: implicit declaration of function 'warten_5sec'
    Von muetzeglatze im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 11.03.2014, 15:10
  3. Implicit declaration
    Von eli4u im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 01.11.2006, 15:37
  4. implicit declaration of function `sbi'
    Von veloxid im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 07.07.2005, 14:05
  5. Fehler: implicit declaration of function `_SFR_IO8'
    Von MartinITM im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 16.05.2005, 12:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress