Avatar billede Simon Praktikant
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.
Avatar billede arne_v Ekspert
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;
}
Avatar billede Simon Praktikant
11. april 2011 - 15:54 #2
Ja, jeg kan godt se hvad du mener. Men det er jo ikke en Makro. :-)
Avatar billede arne_v Ekspert
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.
Avatar billede Simon Praktikant
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.
Avatar billede Simon Praktikant
27. maj 2011 - 19:25 #5
Hej arne_v

Tak for hjælpen. Selv om dit svar ikke hjalp mig helt i mål med en metode udelukkende baseret på makroer, skal du have point aligevel.

Hvis du smider et svar får du point.
Avatar billede arne_v Ekspert
27. maj 2011 - 20:37 #6
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester