De quoi il s'agit CE CODE C++
Résolu/Fermé
A voir également:
- De quoi il s'agit CE CODE C++
- Code ascii de a - Guide
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
2 réponses
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
Modifié par jisisv le 19/02/2016 à 15:35
Modifié par jisisv le 19/02/2016 à 15:35
Ta macro var2 est complètement pourrave.
après modification élémentaire:
Pré-compilation:
Utilise plutôt #define var2(x,y ) ((x)*(y) + (y)*(x))
Si c'est un exercice, ton prof ferait mieux de te donner les bonnes bases. Etant mal voyant, je ne vais pas me donner des migraines avec des pré et post incréments. Une base du bon codage, c'est la lisibilité.
Je n'ai pas examiné la suite !!!
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
après modification élémentaire:
#define var2(x,y ) x*y + y*x int main( int argc, char *ARGV[] ) { int a, b, c; c = var2( a + b , c ); c = var2 ( (a + b ), c); return 0; }
Pré-compilation:
johand@bata:~/src/CCM/C$ gcc -Wall -E -o badmacro.cc badmacro.c; grep "c = " badmacro.cc
c = a + b*c + c*a + b; // un monôme "a"
c = (a + b )*c + c*(a + b ); // pas de monôme "a"
Utilise plutôt #define var2(x,y ) ((x)*(y) + (y)*(x))
Si c'est un exercice, ton prof ferait mieux de te donner les bonnes bases. Etant mal voyant, je ne vais pas me donner des migraines avec des pré et post incréments. Une base du bon codage, c'est la lisibilité.
Je n'ai pas examiné la suite !!!
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
19 févr. 2016 à 15:39
19 févr. 2016 à 15:39
Bonjour,
Ce code semble est fait pour montrer la différence entre une fonction inline et une Macro.
Le problème est qu'il utilise des instructions clairement indiquées comme 'unpredictable' par la norme. Alors comparer des choses imprévisibles (fonctions avec des ++) et des choses tordues (macros manquant de parenthèses) ne sert à rien!! Merci le prof!!
Exemples :
define on remplace x et y =>
=> on a fait plein de ++ auquels on ne s'attendait pas et on fait des additions où on attend des multiplications! Mais la résolution de l'expression est possible!
quand la fonction est appelée, elle reçoit X=D'+M' et Y=M' (mais M a-t-il été préincrementé 1 ou 2 fois pour avant le calcul de X, et 1 ou 2 fois avant le calcul de Y ? le compilateur fait un choix arbitraire!!)
=> Ici cela semble plus clair et plus simple et pourtant le résultat est totalement imprévisible (le compilateur prévient par un warning!)
Ce code semble est fait pour montrer la différence entre une fonction inline et une Macro.
Le problème est qu'il utilise des instructions clairement indiquées comme 'unpredictable' par la norme. Alors comparer des choses imprévisibles (fonctions avec des ++) et des choses tordues (macros manquant de parenthèses) ne sert à rien!! Merci le prof!!
Exemples :
int c = var2 ((a++)+(++j) , ++j) ;.
define on remplace x et y =>
int c = (a++)+(++j)*++j + ++j*(a++)+(++j);
=> on a fait plein de ++ auquels on ne s'attendait pas et on fait des additions où on attend des multiplications! Mais la résolution de l'expression est possible!
int H = VAR2 ((D++)+(++M) , ++M) ;fonction inline => la fonction reçoit deux paramètres qui préincrémentent M!
quand la fonction est appelée, elle reçoit X=D'+M' et Y=M' (mais M a-t-il été préincrementé 1 ou 2 fois pour avant le calcul de X, et 1 ou 2 fois avant le calcul de Y ? le compilateur fait un choix arbitraire!!)
=> Ici cela semble plus clair et plus simple et pourtant le résultat est totalement imprévisible (le compilateur prévient par un warning!)