mikrocontroller.net

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.
Autor: JJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich würde gerne einen URL-Pfad per Marko zu Compilezeit erstellen.

#define PASTER2(x,y)          x ## y
#define EVALUATOR2(x,y)       PASTER2(x,y)

#define PASTER3(x,y,z)        x ## y ## z
#define EVALUATOR3(x,y,z)     PASTER3(x,y,z)

#define SERVER                "http://marity.com:"
#define SERVER_PORT           8080
#define URL                   EVALUATOR2(SERVER, SERVER_PORT)

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.
#define SERVER                http://marity.com:

Wie bekomme ich das Dilemma gelöst?

Danke und Grüße
JJ

Autor: Kaj (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define xstr(s) str(s)
#define str(s) #s

#define SERVER                "http://marity.com:"
#define SERVER_PORT           8080
#define URL                   SERVER xstr(SERVER_PORT)

: Bearbeitet durch User
Autor: JJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Was ginge, wäre das:

Danke! Geht!

Autor: Bauform B. (bauformb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal eine Zwischenfrage: was ist der Vorteil gegenüber dieser Variante:
#include <stdio.h>

#define SERVER       "http://marity.com:"
#define SERVER_PORT  "8080"

int
main (void)
{
   const char* url = SERVER SERVER_PORT;

   printf ("%s\n", url);
   return 0;
}
?

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.

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