Forum: Compiler & IDEs URL Pfad per Makro erstellen


von JJ (Gast)


Lesenswert?

Hallo!

Ich würde gerne einen URL-Pfad per Marko zu Compilezeit erstellen.
1
#define PASTER2(x,y)          x ## y
2
#define EVALUATOR2(x,y)       PASTER2(x,y)
3
4
#define PASTER3(x,y,z)        x ## y ## z
5
#define EVALUATOR3(x,y,z)     PASTER3(x,y,z)
6
7
#define SERVER                "http://marity.com:"
8
#define SERVER_PORT           8080
9
#define URL                   EVALUATOR2(SERVER, SERVER_PORT)
10
11
const char* url = URL;

Beim Kompilieren bekomme ich folgende Fehlermeldung:
error: pasting ""http://marity.com:""; and "8080" does not give a valid 
preprocessing token

Auffallen tun die zwei "" beim Server. Nur wenn ich beim Makro die 
Anführungszeichen weg lasse kann er das Makro nicht ausführen, da das 
"//" anscheinend als Kommentar interpretiert wird.
1
#define SERVER                http://marity.com:

Wie bekomme ich das Dilemma gelöst?

Danke und Grüße
JJ

von Kaj (Gast)


Lesenswert?


von Rolf M. (rmagnus)


Lesenswert?

JJ schrieb:
> error: pasting ""http://marity.com:"";; and "8080" does not give a valid
> preprocessing token

Token pasting fügt zwei Dinge zu einem Token zusammen. 
"http://marity.com:"; und "8080" zusammen ergibt zusammen kein sinnvolles 
Token.
Was ginge, wäre das:
1
#define xstr(s) str(s)
2
#define str(s) #s
3
4
#define SERVER                "http://marity.com:"
5
#define SERVER_PORT           8080
6
#define URL                   SERVER xstr(SERVER_PORT)

: Bearbeitet durch User
von JJ (Gast)


Lesenswert?

Rolf M. schrieb:
> Was ginge, wäre das:

Danke! Geht!

von Bauform B. (bauformb)


Lesenswert?

Mal eine Zwischenfrage: was ist der Vorteil gegenüber dieser Variante:
1
#include <stdio.h>
2
3
#define SERVER       "http://marity.com:"
4
#define SERVER_PORT  "8080"
5
6
int
7
main (void)
8
{
9
   const char* url = SERVER SERVER_PORT;
10
11
   printf ("%s\n", url);
12
   return 0;
13
}
?

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.