Versions Macro

Gast #3539567
Lesenswert?
• ▲
▼
Hallo Zusammen,

#define VERSION_MAJOR 1
#define VERSION_MINOR 2

#define STRINGIZE2(s) #s
#define STRINGIZE(s) STRINGIZE2(s)
#define VERSION_STRING STRINGIZE(VERSION_MAJOR) "." 
STRINGIZE(VERSION_MINOR)

in VERSION_STRING habe ich jetzt "1.2"

kennt jemand eine Möglichkeit auch "1.002" daraus zu generieren nur mit 
einem macro?


danke
Moderator Persönliche Seite #3539577
Lesenswert?
• ▲
▼
Mir fiele dazu nur die #if-Anweisung ein:
1
#define VERSION_MAJOR 1
2
#define VERSION_MINOR 2
3
#define STRINGIZE2(s) #s
4
#define STRINGIZE(s) STRINGIZE2(s)
5
#if VERSION_MINOR < 10
6
#  define VERSION_STRING STRINGIZE(VERSION_MAJOR) ".00" STRINGIZE(VERSION_MINOR)
7
#elif VERSION_MINOR < 100
8
# define VERSION_STRING STRINGIZE(VERSION_MAJOR) ".0" STRINGIZE(VERSION_MINOR)
9
#else
10
# define VERSION_STRING STRINGIZE(VERSION_MAJOR) "." STRINGIZE(VERSION_MINOR)
11
#endif
Gast #3539591
Lesenswert?
• ▲
▼
Der C-Präprozessor ist nicht für sowas gedacht. Du brauchst hier 
Schleifen. Das geht zwar, ist aber ein Krampf.

Setze einfach VERSION_MINOR auf "002" oder generiere die Versionsnummer 
anders. Wenn du C++ verwendest, guck dir mal constexpr an.
#3539625
Lesenswert?
• ▲
▼
Ich mache das mit ner Batch, die dann auch gleich das Hex entsprechend 
nennt.
1
@echo off
2
set vers_h=01
3
set vers_l=05
4
set name=UVLS600FP
5

6
set fcpu=8e6
7
set mcu=mega328p
8
set main=%name%_V%vers_h%.%vers_l%
9

10
echo --std=gnu99 >opt.z
11
echo -DPROJECT_STRING=\"%name%\" >>opt.z
12
echo -DREVISION_STRING=\"%vers_h%.%vers_l%\" >>opt.z
13
echo -DREV_HI=0x%vers_h% >>opt.z
14
echo -DREV_LO=0x%vers_l% >>opt.z
15
echo -DF_CPU=%fcpu% >>opt.z
16

17
avr-gcc.exe *.c @opt.z -Os -mmcu=at%mcu% -gdwarf-2 -o main.out
18
avr-objcopy.exe -O ihex main.out "%main%.hex"
19
del main.out
20
del opt.z

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.