Forum: Compiler & IDEs #define - mit Sonderzeichen


von Daniel (Gast)


Lesenswert?

Hallo,

es wäre schön, wenn ihr mir sagen könntet, woran folgendes liegt:
1
#define Test(a)       a' = a
2
3
Test(b)
führt zu :
1
b' = a
gewünscht von mir wäre:
1
b' = b

und ist es möglich ein Makro in einem Makro zu definieren, z.B.:
1
#define Test(x,y)     x und y\
2
                      #ifndef x\
3
                      #define x\
4
                      TEXT\
5
                      #endif

Falls die Frage nach dem "warum" kommt, ich nutze in dem Fall den 
Präprozessor um Textdateien zu erzeugen.

Dankeschön,
Gruß,
Daniel

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das Sonderzeichen ist das Problem. Das hat für C eine syntaktische 
Bedeutung, die der Präprozessor berücksichtigt; es leitet eine 
char-Konstante ein.

von g457 (Gast)


Lesenswert?

..und wird vom gcc auch korrekt bemeckert:
1
$ cat main.c 
2
#define Test(a)       a' = a
3
Test(b)
4
$ gcc -Wall -E -o main.E main.c 
5
main.c:1:24: warning: missing terminating ' character

..warnings sind entgegen landläufiger Meinung nicht dazu da, ignoriert 
zu werden ;-)

von Daniel (Gast)


Lesenswert?

Gibt es denn eine Möglichkeit dem Präprozessor zu sagen, dass es sich 
nicht um das Steuerzeichen ' handelt, sondern um ein normales Zeichen?
Irgendwas in die Richtung
1
char a = '\'';

von (prx) A. K. (prx)


Lesenswert?

Daniel schrieb:

> Falls die Frage nach dem "warum" kommt, ich nutze in dem Fall den
> Präprozessor um Textdateien zu erzeugen.

Der ist dafür allerdings herzlich ungeeignet.
Besser: Der Makroprozessor "m4":

define(Test, $1' = $1)
Test(b)
 =>
b' = b

Der kann auch einen Makro im Makro definieren.

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.