Forum: Compiler & IDEs strings defines möglichst einfach


von rolle (Gast)


Lesenswert?

Hallo,
folgendes ist gegeben

#define VERSION_HB 3
#define VERSION_LB 0

#define VERSION_STRING "VERSION_HB.VERSION_LB"

Natürlich ist jetzt der VERSION_STRING nicht "3.0"
aber wie und geht dies überhaupt?

von DirkB (Gast)


Lesenswert?

Probier mal
1
#define _STR(s) _VAL(s)
2
#define _VAL(s) #s
3
 
4
#define VERSION_HB 3
5
#define VERSION_LB 0
6
7
#define VERSION_STRING _STR(VERSION_HB)"."_STR(VERSION_LB)

von rolle (Gast)


Lesenswert?

Das funktioniert leider nicht. Als String kommt dann der Name der 
defines:
VERSION_HB.VERSION_LB und nicht 3.0

Danke

von DirkB (Gast)


Lesenswert?

Noch mal komplett:
1
#include <stdio.h>
2
3
#define _STR(s) _VAL(s)
4
#define _VAL(s) #s
5
 
6
#define VERSION_HB 3
7
#define VERSION_LB 0
8
9
#define VERSION_STRING _STR(VERSION_HB)"."_STR(VERSION_LB)
10
11
int main()
12
{
13
  puts(VERSION_STRING);
14
15
  return 0;
16
}
Bei mir steht da  3.0

von rolle (Gast)


Lesenswert?

Hallo,

nochmals danke für deine Antwort.

Du hast natürlich recht,
der gcc macht das auch, allerdings hat der mcc18
(C18 Compiler von Microchip für pic18)
seine Probleme damit.

Gruß

von DirkB (Gast)


Lesenswert?

Das ist dann aber mehr ein Problem vom cpp18 (dem Preprozessor).

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.