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.
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.
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?
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.
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?
Initialisierung pro Modul mit __attribute__((constructor)). Aber Reihenfolge beachten. Stefan
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.