EVALUATEUR D'EXPRESSION ARITHMÉTIQUE

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 17 avril 2012 à 11:37
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 17 avril 2012 à 11:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54219-evaluateur-d-expression-arithmetique

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
17 avril 2012 à 11:37
Bonjour.

Quelques critiques:
- Évite d'utiliser Dev-C++ (c'est incroyable le nombre de débutant qui se font avoir !). C'est un très très vieil IDE qui embarque un compilateur antédiluvien. Préfère une solution plus récente comme QtCreator, Code::Block ou encore Visual Studio Express.
- On code dans les *.c, pas dans les *.h ! C'est ce qu'il y a de plus choquant dans ton code actuellement.
- Bannis les goto de ton code. goto est une fonction avancée, qui est à utiliser avec grande parcimonie. Les cas où un goto est élégant, sont extrêmement rares. À moins d'être particulièrement agueris en C ou C++, il y a 99.9% de chance qu'un goto ne soit pas nécessaire. En d'autre terme, si tu vois un goto dans ton code, pose toi des questions...
- Les commentaires, c'est vraiment pas ça. Si ça peut te rassurer, ça l'est rarement :p. Je te renvoi à la lecture d'un article que j'ai écrit: http://0217021.free.fr/portfolio/axel.berardino/articles/ecrire-de-bons-commentaires
- Il faut que tu révises tes fonctions standards. La fonction "valeur" c'est un peu n'importe quoi. Tu as la fonction "atoi" qui est bien plus adaptée.
- On ne gère jamais les erreurs intrusivement. On évite de mélanger les messages d'erreur et le code. Généralement on réalise une fonction, qui retourne un code d'erreur. Libre ensuite à la partie d'affichage d'afficher le bon message d'erreur en fonction du code (ou de ne rien afficher).
Ex:
Au lieu de:
void func(int a, int* b)
{
if (a == 0)
printf("msg erreur");

*b = 2 * a;
}
func(5, &b);

Tu devrais avoir:
int func(int a, int* b)
{
if (a == 0)
return 0;

*b = 2 * a;
return 1;
}
if (func(5, &b) == 0)
printf("msg erreur");
else
printf("ok");

De plus, si tu sépares bien ton code, de tes messages d'erreurs. Ça permettrait d'inclure ton code dans n'importe quelle solution. Là c'est tellement lié à Allegro, que je ne peux pas le compiler chez moi (j'aurais aimé extraire uniquement le code métier, pour le tester).

- Il y a des fonctions assez moyennes. Par exemple la fonction "tester" qui ne vérifie pas les bornes, et surtout au lieu d'itérer sur ton tableau, tu utilises des if à outrance (sans compter que les return étant débranchant, tu n'as absolument pas besoin de faire des "else" de partout).
- Je n'ai pas compris l'intérêt de la fonction "TEST_ADD".
- On évite les define, et on préfère l'utilisation de "static const + type".

Y a encore pas mal de petites choses, mais je t'invite déjà à revoir tous les points cités plus haut.

Quant au programme même, impossible de le tester sans installer Allegro. Je n'ai donc pas pu l'essayer (encore une fois, avec moins d'intrusivité, j'aurais pu).
Rejoignez-nous