einfaches include #define Problem

Gast #1522769
Lesenswert?

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ß
Gast #1522790
Lesenswert?

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.
Gast #1522794
Lesenswert?

> 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.
Gast #1522833
Lesenswert?

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ß
#1522839
Lesenswert?

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.

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