Forum: Compiler & IDEs #define-Übergabe an Bibliotheksfunktion


von Daniel (Gast)


Lesenswert?

Hallo zusammen!

Um meinen Code einfacher aber trotzdem dynamisch zu gestalten, will ich 
oft benötigte Funktionen in eine Bibliothek packen. Nun habe ich das 
Problem, dass variable Werte beim vorcompilieren der Funktionen nicht 
festgelegt sind und deswegen beim compilieren Fehler auftreten.

Der konkrete Fall sieht so aus:
Meine Hauptroutine (main.c) ruft eine Funktion auf:
1
#include "lib.h"
2
#define ADDRESS 0x22
3
4
int main(void)
5
{
6
 init_controller();
7
 ...
8
}

Das Symbol ADDRESS wird wegen der Präprozessor-Direktive durch 0x22 
ersetzt.
Die Funktion "init_controller" könnte nun so aussehen:
1
void init_controller();
2
{
3
 ...
4
 set_address(ADDRESS);
5
 ...
6
}

Hier soll also erst das Symbol "ADDRESS" an eine weitere Funktion 
übergeben werden.
Die Funktion "set_address" wiederum im Detail:
1
void set_address(int addr)
2
{
3
  ...
4
}

Um eine Bibliothek zu erstellen, muss ich die Funktionen 
"init_controller" und "set_address" vorcompilieren. "ADDRESS" ist aber 
zur Entwicklungszeit noch unbekannt -> somit spuckt der Compiler einen 
Fehler aus. Wie kann ich das umgehen?

Ich könnte nun schon in der Hauptroutine "ADDRESS" als int festlegen und 
in der entsprechenden Funktion mit 'extern' verwenden. Mir wären aber 
defines wesentlich lieber.

Vielen Dank für eure Anregungen und Tipps!
Daniel

von Stefan E. (sternst)


Lesenswert?

Übergebe einfach init_controller die Adresse auch als Parameter,
also:
1
void init_controller(int addr);
2
{
3
 ...
4
 set_address(addr);
5
 ...
6
}
und:
1
#include "lib.h"
2
#define ADDRESS 0x22
3
4
int main(void)
5
{
6
 init_controller(ADDRESS);
7
 ...
8
}

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.