Forum: Compiler & IDEs URL Pfad per Makro erstellen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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
}
?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.