Präprozessor Warnung bei nichtimplementierung von Funktion

Gast #2618267
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.
Gast #2618273
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.
Gast #2618280
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?
Gast #2618302
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.
Gast #2618368
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?
Gast #2619586
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren