Programme en C a diminuer
Fermé
Colas
-
Modifié le 9 déc. 2021 à 22:04
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 9 déc. 2021 à 22:03
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 9 déc. 2021 à 22:03
A voir également:
- Programme en C a diminuer
- Comment diminuer la taille d'un fichier - Guide
- Programme demarrage windows 10 - Guide
- Comment diminuer la taille d'une photo - Guide
- Comment diminuer la luminosité d'un ordinateur - Guide
- Désinstaller programme windows 10 - Guide
2 réponses
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 8 déc. 2021 à 19:30
Modifié le 8 déc. 2021 à 19:30
Salut Colas,
J"ai rarement vu un code C utilisant autant l'opérateur
Pourquoi veux-tu faire cela ?
Le but est-il de savoir si tu peux encore économiser des lignes en continuant d'abuser de cet opérateur et en rajoutant des expressions supplémentaires séparées par des virgules au lieu de
Quant à savoir si tu peux supprimer du code, ou refactoriser le code pour en retirer des éléments redondants, je pense qu'on ne peut pas le dire sans avoir connaissance du reste du code.
J"ai rarement vu un code C utilisant autant l'opérateur
,et une question aussi inhabituelle.
Pourquoi veux-tu faire cela ?
Le but est-il de savoir si tu peux encore économiser des lignes en continuant d'abuser de cet opérateur et en rajoutant des expressions supplémentaires séparées par des virgules au lieu de
;sans altérer le fonctionnement du code ? Si oui, c'est assez facile et tu as de nombreux choix.
Quant à savoir si tu peux supprimer du code, ou refactoriser le code pour en retirer des éléments redondants, je pense qu'on ne peut pas le dire sans avoir connaissance du reste du code.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
9 déc. 2021 à 22:03
9 déc. 2021 à 22:03
Bonjour,
Ça n'a aucun sens d'utiliser l'opérateur virgule pour limiter le nombre de lignes. Autant ôter tous les retours chariots, ton code fera une unique ligne et sera totalement illisible!
On peut remplacer :
par:
Mais ça m'étonnerais beaucoup qu'un prof attende cela!
Le but attendu devrait être plutôt de ne pas faire de traitement inutile et de bien décomposer en sous-fonctions.
Ça n'a aucun sens d'utiliser l'opérateur virgule pour limiter le nombre de lignes. Autant ôter tous les retours chariots, ton code fera une unique ligne et sera totalement illisible!
On peut remplacer :
retour = checkBuiltins(av, buff, count); if (retour == 0 || retour == 2) { free_p(1, buff), free_a(av), retour == 0 ? (retour = 0) : (retour = 1); return (retour); }
par:
if ((retour = checkBuiltins(av, buff, count)) == 0 || retour == 2) return free_p(1, buff), free_a(av), retour>0;
Mais ça m'étonnerais beaucoup qu'un prof attende cela!
Le but attendu devrait être plutôt de ne pas faire de traitement inutile et de bien décomposer en sous-fonctions.
Modifié le 9 déc. 2021 à 22:05
Modifié le 8 déc. 2021 à 19:41
Cela devrait être sans incidence sur l'exécution de ton code ou son résultat, car tu n'évalues pas de toutes façons l'éventuelle valeur de retour de tes fonctions free_xyz() dans ton code, mais c'est clairement affreux et un contournement de la règle qui t'est imposée.
8 déc. 2021 à 19:42
shell_loop.c: In function ‘shell_loop’:
shell_loop.c:47:32: error: expected expression before ‘return’
47 | free_p(1, buff), free_a(av), return (2);
Modifié le 9 déc. 2021 à 14:25
Une chose que tu pourrais faire, si tu peux modifier le prototype de tes fonctions free_p() et free_a(), ou au moins juste free_a(), est qu'elle(s) retourne(nt) le code à passer à return.
Par exemple, ton prototype pour free_a() pourrait être : et retourner la valeur de ret_val passée en fin de fonction. Et tu fais pareil éventuellement pour l'autre fonction free_p() qui prendrait un 3ème paramètre, si tu l'utilises aussi de cette façon.
Ainsi, tu pourrais écrire : ou juste si tu te contentes d'utiliser de cette façon toujours free_a() en fin de ligne en dernier après tes virgules.
Seule la valeur de la dernière expression est considérée en cas d'utilisation de l'opérateur virgule, les autres étant ignorées.