Versions-String aus mehreren Teilen erzeugen - concatenation?

Gast #2209170
Lesenswert?
• ▲
▼
Hallo!

ich versuch gerade rauszukriegen, wie man einen String im Präprozessor 
zusammensetzt.

Dabei soll so ein String hier rauskommen: "Software-Version 1.23"

und besteht aus diesen Teilen:

- zusammengestzter string befindet sich in einem #define, z.B. so:
1
#define _SW_STR_ "Software-Version 1.23"

- Einzelbestandeteile der Versionsnummer sind in einem #define:
1
#define _VMSTR_  Software-Version
2
#define _FOO_ 1
3
#define _BAR_ .123

Ich dachte da jetzt an so etwas:
1
#define CONCATEN( x,y,z )    x ## y ## z
2
#define REPLCONC( a,b,c )    CONCATEN( a, b, c )
3

4
#define _SW_STR_ REPLCONC( _FOO_, _BAR_, _VMINOR_ )
5

6

7
char string_ptr[]= #_SW_STR_;

Das REPLCONC() sorgt dafür, dass der Inhalt von _FOO_ ( also 1) 
verwendet wird - und nicht nur der Token (_FOO_).

Aber so funktioniert das leider noch nicht :(
in string_ptr steht danach der String "x ## y ## z"

Kennt da jemand eine elegante Möglichkeit um soetwas zu generieren?
Gast #2209572
Lesenswert?
• ▲
▼
gcc_fan schrieb:
> Hallo!
>
> ich versuch gerade rauszukriegen, wie man einen String im Präprozessor
> zusammensetzt.
>
> Dabei soll so ein String hier rauskommen: "Software-Version 1.23"
>
> und besteht aus diesen Teilen:
>
> - zusammengestzter string befindet sich in einem #define, z.B. so:
>
1
> #define _SW_STR_ "Software-Version 1.23"
2
>
>
> - Einzelbestandeteile der Versionsnummer sind in einem #define:
>
1
> #define _VMSTR_  Software-Version
2
> #define _FOO_ 1
3
> #define _BAR_ .123
4
>
>
> Ich dachte da jetzt an so etwas:
>
>
1
> #define CONCATEN( x,y,z )    x ## y ## z
2
> #define REPLCONC( a,b,c )    CONCATEN( a, b, c )
3
> 
4
> #define _SW_STR_ REPLCONC( _FOO_, _BAR_, _VMINOR_ )
5
> 
6
> 
7
> char string_ptr[]= #_SW_STR_;
8
>

Warum so kompiliziert?

#define VMSTR  "Software-Version"
#define FOO "1"
#define BAR ".123"

char string_ptr[]= VMSTR " " FOO_ _BAR;

Sollte tun was Du willst, modulo dem extra define SW_STR. Symbole mit 
führendem Unterstrich sind aber meines Wissens für C reserviert.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.