Hallo, leider hat die Suche nichts auf Anhieb rausgespuckt. hier mein problem: file.h #ifdef VAR_PLACE_ROM #define VAR_PLACE romdata #else #define VAR_PLACE idata #endif void test(void); ------ file.c #pragma VAR_PLACE unsigned char testvar; void test(void) { ; } ------- main.c #define VAR_PLACE_ROM #include "file.h" void main(void) { } ------------ Die variable liegt immer im idata und nicht im rom -> er kennt die Definition nicht wieso? muss ich in file.h die main.c bzw. die Datei mit dem define einbinden? Das wäre schlecht wenn ja die file.h ein Teil einer Library wäre und in verschiedenen Projekten eingebunden wird. Wo ist mein Denkfehler? Vielen dank für die Antworten! Gruß
> -> er kennt die Definition nicht wieso?
Er kennt sie schon - in main.c, dann da steht sie ja. In file.c aber
nicht.
hallo, danke für die antwort. nur wie löst man denn ein solches problem? ich habe gedacht durch das include kennt file.h das define. vielen dank
Hallo, verschiebe die Definition #define VAR_PLACE_ROM an den Anfang der file.h. bei einer Lib stehst Du aber auf dem Schlauch. Eine Lib ist beim Einbinden bereits kompiliert und der Datentyp Deiner Variable schon fest.
> ich habe gedacht durch das include kennt file.h das define. Ja, aber eben nur in main.c. Der Header wird ja durch das #include nicht verändert. Er wird beim compilieren von file.c so wie er ist eingebunden, und da dort dann das #define nirgends steht, ist es in file.c auch nicht vorhanden. > nur wie löst man denn ein solches problem? Das #define im Header oder über die Kommandozeile übergeben, und zwar auch beim compilieren von file.c.
mati schrieb: > bei einer Lib stehst Du aber auf dem Schlauch. Eine Lib ist beim > Einbinden bereits kompiliert und der Datentyp Deiner Variable schon > fest. Hallo, danke für die Antworten. Die file.h wird in verschiedenen Porjekten eingebunden. Je nach Projekt soll die Variable im rom oder ram liegen, dies soll in den projekten selbst defeniert werden und nicht im file.h. vielen dank für die zahlreichen antworten gruß
prinz3nroll3 schrieb: > mati schrieb: >> bei einer Lib stehst Du aber auf dem Schlauch. Eine Lib ist beim >> Einbinden bereits kompiliert und der Datentyp Deiner Variable schon >> fest. > > Hallo, > danke für die Antworten. > Die file.h wird in verschiedenen Porjekten eingebunden. Was hilft dir das? Es geht ja nicht um die file.h Es geht auch nicht um die main.c Es geht um die file.c! Und die ist bereits compiliert worden, wenn du sie in die Library einbindest. Damit ist in der Library schon fest fixiert, wie file.c das VAR_PLACE_ROM aufgefasst hat, wenn sie der eigentliche Programmierer in die Finger bekommt. Nichts geht mehr. > Je nach Projekt soll die Variable im rom oder ram liegen, > dies soll in den projekten selbst defeniert werden und nicht im file.h. Dann musst du dir einen Mechanismus einfallen lassen, wie du den Funktionen in file.c diese Entscheidung mitteilen kannst. Und zwar nachdem file.c compiliert wurde.
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.