Präprozessor Warnung bei nichtimplementierung von Funktion

Gast #2618267
Hi Leute,

ich möchte mich bei der Implementierung von eigenen Modulen etwas 
absichern. Z.B. passiert es manchmal, dass ich wichtige Funktionen, die 
Module initialisieren nicht implementiere und dadurch die ganze Sache 
nicht funktioniert. Da diese Banalität oft eine lange Fehlersuche mit 
sich zieht, möchte ich, dass wenn ich bestimmte Funktionen nicht 
aufrufe, eine Warnung erscheint. So ähnlich wie bei Variablen die nicht 
benutzt werden.

Gibt es eine Möglichkeit bei bestimmten Funktionen per Präprozessor 
abzuprüfen, ob sie aufgerufen werden und wenn nicht eine Warnung per 
#warning ... auszugeben?!

Vielen Dank.
Gast #2618273
nö, auf jeden fall nicht im Präprozessor. Denn jeden c Datei wird 
einzeilm übersetzt, damit kann er gar nicht wissen ob sie woanders 
aufgerufen wird.

Du könntest ja in jede "nicht init" funktion ein check einbauen ob 
vorher init aufgerufen wurde.
Gast #2618280
Stimmt, dass hat ja eigentlich was mit dem linker zu tun und der kommt 
ja weit nach dem präprozessor...

Gibt es sonst noch irgendwelche ideen? Die möglichst vor der 
eigentlichen Laufzeit greifen?
Gast #2618302
Du kannst dir einen Header mit allen wichtigen Funktionen schreiben. Die 
Funktionen dann als "static" aber ohne "inline" deklarieren.

Eine andere Möglichkeit wäre "make" nachschaun zu lassen ob im map-File 
alle von dir als wichtig eingestuften Funktionen auch aufgerufen werden.
Gast #2618368
Gcc für avr.

Für mein entsprechendes Modul habe ich ja eine .c und eine .h Datei. 
Soll ich die Funktion in der .h Datei als static deklarieren in der .c 
aber nicht?

Wenn ich die funktion in der .c Datei als static deklariere kann Sie 
doch nicht mehr von außen aufgerufen werden oder? Dachte Sie wäre dann 
nur Modul-global.

Wie kann ich das makefile etwas prüfen lassen?
Gast #2619586
Hallo,

In Assembler ist sowas normalerweise ganz einfach: schreib

    Prozedurname1   EXTERNAL
    Prozedurname2   EXTERNAL

usw. für jede gewünschte Funktion, dann meldet der Linker, wenn er die 
Prozedur nicht findet.

Gruss Reinhard

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.