Forum: Compiler & IDEs Projectabhängige includes #defines zusammenfügen?


von prinzenrolle (Gast)


Lesenswert?

Hallo,

ich habe folgendes vor:
--------------------
File: Project.h
#define PROJECT "Test"
#include "Lib.h"

-------------------
File: Lib.h

#include PROJECT "_Tasten.h" //"Test_Tasten."

-------------------

->
Ziel ist es das je nach definition von PROJECT andere Dateien 
eingebunden werden leider bekomme ich die defines nicht zusmmangefügt.

Jemand eine Idee?

Danke

von Michael R. (dj_motionx)


Lesenswert?

Hallo sofern ich das jetzt verstanden habe suchst du nach der ifdef 
Anweisung

Also in lib.h

#ifdef PROJECT
#include "_Tasten.h"
#endif

Also sofern du PROJECT irgendwo definiert hast (#define PROJECT) ist die 
"If defined" Präprozessoranweisung erfüllt und _Tasten.h wird 
inkludiert.

Hast du das so gemeint?

L.g. Michael

von prinzenrolle (Gast)


Lesenswert?

Michael Rathmair schrieb:
> Hallo sofern ich das jetzt verstanden habe suchst du nach der ifdef
> Anweisung
>
> Also in lib.h
>
> #ifdef PROJECT
> #include "_Tasten.h"
> #endif
>
> Also sofern du PROJECT irgendwo definiert hast (#define PROJECT) ist die
> "If defined" Präprozessoranweisung erfüllt und _Tasten.h wird
> inkludiert.
>
> Hast du das so gemeint?
>
> L.g. Michael

Hallo,
nein das habe ich nicht gemeint.

Es soll includiert werden
test_tasten.h

im project ist
#define PROJECT "test" definiert.


Danke

von Stefan E. (sternst)


Lesenswert?

1
#define CATx(a,b) a##b
2
#define CAT(a,b) CATx(a,b)
3
4
#define STRx(a) #a
5
#define STR(a) STRx(a)
6
7
8
#define PROJECT Test
9
10
11
#include STR(CAT(PROJECT,_Tasten.h))

von Rene H. (Gast)


Lesenswert?

Ich vermute mal das geht nicht weil include ebenfalls eine Präprozessor 
Anweisung ist. Ich hab es aber nicht überprüft was der der Präprozessor 
macht.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rene H. schrieb:
> Ich hab es aber nicht überprüft was der der Präprozessor
> macht.

Du hättest du nur einfach Stefans Code durch den Präprozessor jagen
müssen:
1
$ echo "hi" > Test_Tasten.h
2
$ cc -E -
3
#define CATx(a,b) a##b
4
#define CAT(a,b) CATx(a,b)
5
6
#define STRx(a) #a
7
#define STR(a) STRx(a)
8
9
10
#define PROJECT Test
11
12
13
#include STR(CAT(PROJECT,_Tasten.h))
14
^D
15
# 1 "<stdin>"
16
# 1 "<built-in>"
17
# 1 "<command line>"
18
# 1 "<stdin>"
19
# 11 "<stdin>"
20
# 1 "Test_Tasten.h" 1
21
hi
22
# 11 "<stdin>" 2

von Rene H. (Gast)


Lesenswert?

Jo, habe ich eben schnell gemacht, Du warst schneller :-).

Funzt fabelhaft.

von Micha (Gast)


Lesenswert?

Stefan Ernst schrieb:
> #define CATx(a,b) a##b
> #define CAT(a,b) CATx(a,b)
>
> #define STRx(a) #a
> #define STR(a) STRx(a)
Dass man mit CAT() Symbole zusammenfügen kann weiß ich, aber wozu dient 
das STR()?

von Stefan E. (sternst)


Lesenswert?

Micha schrieb:
> Stefan Ernst schrieb:
>> #define CATx(a,b) a##b
>> #define CAT(a,b) CATx(a,b)
>>
>> #define STRx(a) #a
>> #define STR(a) STRx(a)
> Dass man mit CAT() Symbole zusammenfügen kann weiß ich, aber wozu dient
> das STR()?

Es macht aus dem Argument ein String-Literal.
STR(hallo) -> "hallo"

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.