Je souhaite définir une macro au moment de la compilation en fonction de la valeur d'une autre macro. Toutefois, ce code n'est pas en cours d'exécution comme prévu:Problème de définition de macro étrange
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIXTEEN 16
#define TWO (SIXTEEN % 8 == 0)? (SIXTEEN/8) : ((SIXTEEN/8) + 1)
int main();
int main() {
printf("max = %d\n", TWO);
int i;
for (i = 0; i < TWO; i++) {
printf("%d\n", i);
}
return 0;
}
Cette impression:
max = 2
0
1
2
...
et se poursuit jusqu'à fin, quand il doit être simplement l'impression:
max = 2
0
1
et en sortant.
Si je fais ça à la place, cela fonctionne:
#define TWO 2
Je pensais que cela était un problème avec la définition de macro ... mais, si je fais ce qui suit avec le #define original, il semble travail:
...
int count = TWO;
for (i = 0; i < count; i++) {
...
Quelqu'un peut-il expliquer ce qui se passe ici?
+1 pour me battre de 37 secondes. = ( –
+1 La règle générale est la suivante: si votre macro est supposée se développer dans une expression, assurez-vous qu'elle est incluse dans une paire de parens (correspondant), à la seule exception si elle est garantie de se développer en un seul jeton (comme la macro SIXTEEN de l'OP). –