Forum: Mikrocontroller und Digitale Elektronik Präprozessor Warnung bei nichtimplementierung von Funktion


von tf_real10 (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von tf_real10 (Gast)


Lesenswert?

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?

von Stefan E. (sternst)


Lesenswert?

Welcher Compiler?

von R2D2 (Gast)


Lesenswert?

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.

von tf_real10 (Gast)


Lesenswert?

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?

von Stefan (Gast)


Lesenswert?

Initialisierung pro Modul mit __attribute__((constructor)).
Aber Reihenfolge beachten.
Stefan

von Reinhard Kern (Gast)


Lesenswert?

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

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.