Ne pouvons-nous écrire une instruction exécutable pour #define?

Pourquoi ai-je 27 ans? Impossible de # define prendre une instruction exécutable 5 + 2?

#include
#include
#define x 5+2
void main()
{
    int i;
    i=x*x*x;
    printf("%d",i):
    getch();
}

Sortie:

27

Je devrais obtenir 343 comme réponse.

0
ajouté édité
Vues: 1
Il y a des tonnes de doublons à cela ... - assez juste, ceux-ci sont difficiles à trouver.
ajouté l'auteur alk, source
@PascalCuoq: En effet, une analyse sociologiquement/psychologiquement sur différents aspects autour d'ici pourrait également être un projet intéressant.
ajouté l'auteur alk, source
@alk Il est intéressant de noter que cet OP supposait que s'il compilait mais ne produisait pas le résultat escompté, cela signifiait qu'il était en quelque sorte interdit d'utiliser les macros d'une certaine manière ("ne peut pas") alors que l'OP de la question à la plate-forme de compilation ("étrange").
ajouté l'auteur Pascal Cuoq, source

2 Réponses

Tout d'abord, ce n'est pas une instruction exécutable, c'est une expression . Un non, il ne devrait pas être 343, parce que l'expression n'est pas entre parenthèses. À cause de cela, la multiplication a préséance sur l'addition, ainsi l'expression évaluée est

5+2*5+2*5+2

lequel est

5+(2*5)+(2*5)+2 = 27

Ce petit exemple illustre les dangers des macros. Vous devriez toujours mettre entre parenthèses le contenu des macros représentant les expressions. En outre, vous devez toujours mettre en parenthèse les paramètres des expressions de macro.

1
ajouté

Les macros sont délicates, car ce ne sont pas des fonctions, seulement des substitutions de texte. Par conséquent, votre expression devient:

i=5+2*5+2*5+2;

Solution: utilisez constante, ou enveloppez votre macro entre parenthèses

#define x (5+2)
0
ajouté