• # Conseils pour se débrouiller

    Posté par . En réponse au message introduire redirection dans un minishell. Évalué à 4. Dernière modification le 06 mars 2016 à 21:28.

    • Quand on programme et que l'on a un problème (ce qui arrive régulièrement) la meilleure solution reste de reproduire un programme minimal qui reproduise le problème: ça rend le problème plus simple à cerner, et donc à résoudre.

    • Quand on demande de l'aide sur un forum, il est très important de décrire le problème. Sinon les gens sont moins motivés pour t'aider, vu qu'ils se demandent si tu as réellement cherché (cf. point 1).

      • Décrire ce que tu as tenté peut aider les autres à localiser le problème.

    Bon, sinon, en vrac:

    • c'est la première fois que je vois une boucle for sur du printf. M'es avis que ton code serait plus propre avec juste une while() qui utilise le 2nde bloc de ton for. Moins il y a de code, mieux c'est (la gestion des erreurs n'entre pas dans ce principe, je précise).
    • fork renvoie un pid_t, pas un int. Ok, dans linux c'est juste un typedef, mais utiliser le type int est une catastrophe en terme de portabilité (selon la plate-forme, int ne correspond pas toujours à un int32_t... entres autres.). Mieux vaut éviter le transtypage implicite. Ça cause des bugs parfois très subtils.
    • évites les macros. Genre, ton define (dont l'intérêt est d'ailleurs franchement douteux mais bon...) serait peut-être mieux en const char PROMPT[] = "? "; encore une fois pour une question de typage. Les macros sont utiles, mais quand on peut s'en passer, c'est mieux, parce que quand tu as un problème causé par une macro, c'est une horreur à déboguer. Et en utilisant de véritables constantes, le compilateur est plus à même de t'indiquer des erreurs (via des warnings éventuellement).
    • ne pas passer de valeurs optionnelles que tu n'utilises de toute façon pas: wait(&status); fait qu'on se dit que la valeur de status sera utilisée, hors tu ne t'en sers pas. Autant utiliser wait(NULL); au moins ton intention est claire. Et être clair est important en programmation.
    • toujours compiler avec "-Wall -Weverything". Tu saurais ainsi que certaines portions de ton code ne seront jamais exécutées.