Programme en C a diminuer
Colas
-
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis un peux dans le rush je doit retirer deux ligne a ce programme mais je ne trouve pas comment faire j'ai tout essayer si vous pouvez m'ader merci beaucoup
Je suis un peux dans le rush je doit retirer deux ligne a ce programme mais je ne trouve pas comment faire j'ai tout essayer si vous pouvez m'ader merci beaucoup
int shell_loop(char **argv, int count) { char *buff = NULL, **av = NULL; ssize_t result = 1, retour; result = prompt(&buff), count++; if (result == -1) { free_pointer(1, buff); return (1); } av = fillarguments(buff, " \t"); if (av[0] == NULL) { free_pointer(1, buff), free_arrayofpointer(av); return (0); } if (av[0][0] != '/') { retour = checkBuiltins(av, buff, count); if (retour == 0 || retour == 2) { free_pointer(1, buff), free_arrayofpointer(av); retour == 0 ? (retour = 0) : (retour = 1); return (retour); } if (!(findinthepath(av))) { printerror(argv, count, av), free_pointer(1, buff), free_arrayofpointer(av); return (2); } else { processus(argv, av, buff, count); free_pointer(2, *av, buff), free_arrayofpointer(av); return (0); } } if (processus(argv, av, buff, count) != 0) { free_pointer(1, buff), free_arrayofpointer(av); return (2); } free_pointer(1, buff), free_arrayofpointer(av); return (0); }
Configuration: Windows / Chrome 96.0.4664.93
A voir également:
- Programme en C a diminuer
- Comment diminuer la taille d'un fichier - Guide
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Comment diminuer la luminosité d'un ordinateur - Guide
- Message programmé iphone - Guide
2 réponses
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.
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.
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.
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);
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.