Robert Larsen: Hvad er der galt med at bruge #define ?
Defines kan være helt udemærkede at bruge, men mange forstår dem ikke og bruger dem forkert.
F.eks.:
#define MAX(a,b) ((a) > (b) ? (a) : (b))
Den kan bruges til at finde den største af to værdier:
int first = 7;
int second = 8;
printf("Det største af %d og %d er %d", first, second, MAX(first, second));
Men prøv at gætte hvad følgende vil skrive:
#include <stdio.h>
#define MAX(a,b) ((a) > (b) ? (a) : (b))
int main (int argc, char ** argv) {
int numbers[] = {-1,7,2,3};
int count;
int max;
for (count = 0; count < sizeof(numbers) / sizeof(int);) {
max = MAX(count++, numbers[count]);
printf("Max is %d\n", max);
}
return 0;
}
Derudover er const mere typesikker hvor defines kræver et cast.
Til gengæld er defines nødvendige til platform uafhængig kode. Specielt hvis du udvikler til Linux med autotools værkøjerne vil du se megen:
#ifdef SOME_DEFINE
...
#elif defined SOME_OTHER_DEFINE
...
#endif
...det kan ikke rigtig lade sig gøre på andre måder.