11. april 2011 - 10:03
Der er
5 kommentarer og 1 løsning
Hjælp til C Makro
Jeg ønsker hjælp til at lave en makro som kan lave følgende major, minor og build -numre........... #define MAJOR 2 #define MINOR 00 #define BUILD 05 ......om til hhv. en integer og en streng i formaterne........ #define VER_REL 200 #define VER_REL_TERM "2.00.05" Jeg har forsøgt mig med noget i den stil: #define VER_REL MAJOR ## MINOR #define VER_REL_TERM MAJOR##.##.MINOR##.##BUILD (denne skal jo så også kunne fortoltes som en streng) Jeg kompilerer med GCC.
Annonceindlæg fra Thinkwise
11. april 2011 - 15:18
#1
Ikke helt hvad du oensker, men taet paa: #include <stdio.h> #include <stdlib.h> #define MAJOR "2" #define MINOR "00" #define BUILD "05" #define VER_REL MAJOR MINOR #define VER_REL_TERM MAJOR "." MINOR "." BUILD int main() { int iv = atoi(VER_REL); char *sv = VER_REL_TERM; printf("%d %s\n", iv, sv); return 0; }
11. april 2011 - 16:27
#3
Den sidste goer jo praecis hvad du oenskede. Den foerste snyder jeg lidt med og laver som string og bruger atoi. Men jeg tror at den bliver tricky som int. En af de smaa finesser er at 08 og 09 ikke er valide som int.
12. april 2011 - 07:38
#4
Grunden til at VER_REL skal læses som en int er at den bliver brugt direkte af andre makroer, hvilket jo er før run time, hvor atoi bliver kaldt. f.eks. #define VER_LAB (900000UL + VER_REL) #define VERSION VER_REL Selvfølgelig kunne atoi jo bare indgå som en del af makroen, men vil nu helst have en ren makro hvis det på nogen måde kan lade sig gøre.