Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petites remarques sur les cours

    8 décembre 2005 à 21:43:49

    Bonjour,
    Je viens de jeter un oeil sur les cours de C... J'ai quelques remarques et suggestion pour les futurs cours.

    Première chose et c'est la plus importante dans mon message, il m'a toujours été formellement interdit d'utiliser system() dans mes programmes. Il est considéré comme une faille de sécurité et peu TOUJOURS etre évité. Dans notre cas par getch() par exemple (pour faire une pause). Malgrès que getch() n'est pas dans la norme ANSI.

    Autre chose d'important, pourquoi :
    int main(... dans des programmes aussi simple. Moi je pense que les types devant des fonctions ça s'apprend plus tard et ici il n'y a aucun interret a mettre des variables et des types aux fonctions.

    void main(void)
    {
    ...
    }
    suffis largement! Je comprend pas.

    Il est important aussi d'apprendre a utiliser les différents type correctement!
    exemple :
    resultat = 5/2;
    Il ne faut certainement pas mettre un type double pour un calcule aussi simple. Vous utilisez de l'espace mémoire inutilement. le type float suffis largement!

    Autre remarque pour les constantes. Elles peuvent être définie juste après les #include grâce à :
    #define NOM_DE_LA_VARIABLE = valeur

    Le nom de la constante se met en majuscules mais c'est une convention d'écriture ce n'est pas obligatoire. Une constante est une valeur qui ne change jamais, il est donc mieux (pour moi) de la délaré comme variable globale et avec DEFINE.
    const int est rarement utilisé (je ne l'ai jamais vu que dans mon livre de théorie). D'autant plus que le DEFINE est important parfois notament pour les conditions
    #ifndefine
    ...
    #endif

    #ifdefine
    ...
    #endif

    Il y a naturellement une grosse différence avec le if. Le define est traduit par la précompilateur.

    Maintenant pour les futurs cours. Il est important d'obliger les programmeurs a vérifier leur scanf car il est la cause de plusieurs erreurs de sécurité aussi! Mais je ne rentrerai pas dans les détails. Je n'aime pas cette fonction.

    Naturellement, tout ce que je dis peux être discuter, je ne donne que mon avis personnel!
    • Partager sur Facebook
    • Partager sur Twitter
      8 décembre 2005 à 22:06:32

      Citation : Adoz

      Bonjour,
      Je viens de jeter un oeil sur les cours de C... J'ai quelques remarques et suggestion pour les futurs cours.

      Première chose et c'est la plus importante dans mon message, il m'a toujours été formellement interdit d'utiliser system() dans mes programmes. Il est considéré comme une faille de sécurité et peu TOUJOURS etre évité. Dans notre cas par getch() par exemple (pour faire une pause). Malgrès que getch() n'est pas dans la norme ANSI.


      Ca j'approuve plus ou moins ; getchar() suffit pour les Windowsiens.

      Citation

      Autre chose d'important, pourquoi :
      int main(... dans des programmes aussi simple. Moi je pense que les types devant des fonctions ça s'apprend plus tard et ici il n'y a aucun interret a mettre des variables et des types aux fonctions.

      void main(void)
      {
      ...
      }
      suffis largement! Je comprend pas.


      Moi je comprends : void main n'est pas standard et n'a _jamais_ existé, c'est un mythe...

      Citation

      Il est important aussi d'apprendre a utiliser les différents type correctement!
      exemple :
      resultat = 5/2;
      Il ne faut certainement pas mettre un type double pour un calcule aussi simple. Vous utilisez de l'espace mémoire inutilement. le type float suffis largement!


      Wahou, ça c'est de l'argument en béton armé... Tu crois vraiment qu'on va économiser de la place pour ça ? (Ptite parenthèse : de nos jours, on optimise souvent pour la vitesse et non plus pour la taille ou la mémoire)

      Citation

      Autre remarque pour les constantes. Elles peuvent être définie juste après les #include grâce à :
      #define NOM_DE_LA_VARIABLE = valeur


      Syntaxe fausse.

      Citation

      Le nom de la constante se met en majuscules mais c'est une convention d'écriture ce n'est pas obligatoire. Une constante est une valeur qui ne change jamais, il est donc mieux (pour moi) de la délaré comme variable globale et avec DEFINE.


      #define n'est pas DEFINE et ce n'est pas une variable globale.

      Citation

      const int est rarement utilisé (je ne l'ai jamais vu que dans mon livre de théorie).


      Ca oui, pour diverses raisons.

      Citation

      D'autant plus que le DEFINE est important parfois notament pour les conditions
      #ifndefine
      ...
      #endif

      #ifdefine
      ...
      #endif


      Syntaxe fausse.

      Citation

      Il y a naturellement une grosse différence avec le if. Le define est traduit par la précompilateur.


      Ca s'appelle un préprocesseur.

      Citation

      Maintenant pour les futurs cours. Il est important d'obliger les programmeurs a vérifier leur scanf car il est la cause de plusieurs erreurs de sécurité aussi! Mais je ne rentrerai pas dans les détails. Je n'aime pas cette fonction.


      m@t ne leur apprend même pas les bons formats à la base donc je ne vois pas ce qu'ils auraient à vérifier...

      Citation

      Naturellement, tout ce que je dis peux être discuter, je ne donne que mon avis personnel!

      • Partager sur Facebook
      • Partager sur Twitter
        9 décembre 2005 à 16:41:18

        Citation : rz0

        Wahou, ça c'est de l'argument en béton armé... Tu crois vraiment qu'on va économiser de la place pour ça ? (Ptite parenthèse : de nos jours, on optimise souvent pour la vitesse et non plus pour la taille ou la mémoire)



        En C certainement! Quand tu vas programmer des puces éléctroniques tu vas réfléchir a deux fois avant d'utiliser 4 bytes à la place de 8. La logique du C peut être appliqué a d'autre language de programmation... C'est n'est pas tout de connaitre le C, il y a une logique derrière!

        Je réctifie le #define NOM_DE_LA_CONSTANTE valeur (thx XantaX)

        Ce n'est pas une variable globale puisque ce n'est pas une... variable mais c'est une donnée qui pourra être utilisée dans tout le programme.

        Pour le void main mythe ou pas... On peut discuter des heures.

        Pour les #ifndef je vois pas le problème? J'utilise ça souvent! Si ce n'est que j'ai pas mis CONSTANTE...
        #ifndefine CONSTANTE
        ...

        préprocesseur? Jamais entendu! Comme quoi l'enseignement de l'informatique est différent d'un pays a l'autre voir même d'une école a l'autre.

        Bon maintenant on peut débattre des heures ladessu lol... Moi je fais ça pour aider c'est tout je critique pas le travail de matéo :)

        Petit rajout : C'est comme le long et le int... Ici matéo utilise tout le temps long alors que dans ma maigre expérience j'ai jamais vu long mais toujours int. Vous allez me dire que c'est la même chose... Mais je suis pas d'accord!
        D'abord c'est
        long int (ou int)
        unsigned int
        short unsigned int
        short int

        Normalement c'est comme ça qu'on note non? D'autant plus que mettre long nous oblige a mettre %ld dans l'affichage à la place de %d tout court... Enfin maintenant p-e qu'il y a une différence je ne sais pas!
        • Partager sur Facebook
        • Partager sur Twitter
          9 décembre 2005 à 16:50:12

          #ifndef pas #ifndefine

          et ça s'appelle bien un préprocesseur et non un précompilateur, si on t'apprend précompilateur c'est faux.
          • Partager sur Facebook
          • Partager sur Twitter
            9 décembre 2005 à 16:50:19

            Citation : Adoz


            Je réctifie le #define NOM_DE_LA_VARIABLE valeur



            <mode type="emmerdeur">
            #define NOM_DE_LA_CONSTANTE valeur
            </mode>

            sa a l'air de rien comme ca .... Mais faut prendre les bonnes habitudes depuis le début.


            edit:

            Citation : Adoz


            Petit rajout : C'est comme le long et le int... Ici matéo utilise tout le temps long alors que dans ma maigre expérience j'ai jamais vu long mais toujours int. Vous allez me dire que c'est la même chose... Mais je suis pas d'accord!
            D'abord c'est
            long int (ou int)
            unsigned int
            short unsigned int
            short int

            Normalement c'est comme ça qu'on note non? D'autant plus que mettre long nous oblige a mettre %ld dans l'affichage à la place de %d tout court... Enfin maintenant p-e qu'il y a une différence je ne sais pas!


            arreter moi si je me trompe:
            Certain compilateur prennais 2octet pour un INT et 4 pour un long ... Donc suivant le compilateur les programme pouvait "foirer".

            Il vaut donc mieu utiliser les Long.
            Et puis pour ce que sa change %d ou %ld ... il faudra bien en convenir ... sa change juste rien de taper 1 lettre en + :/

            A+
            XantaX
            • Partager sur Facebook
            • Partager sur Twitter
              9 décembre 2005 à 16:55:12

              Ben alors je suis d'accord avec toi XantaX. Je ne savais pas! C'est donc plus prudent de mettre long int !

              Int vaut 2 octets sur les processeurs 16 bits...
              • Partager sur Facebook
              • Partager sur Twitter
                9 décembre 2005 à 17:18:44

                Citation

                En C certainement! Quand tu vas programmer des puces éléctroniques tu vas réfléchir a deux fois avant d'utiliser 4 bytes à la place de 8. La logique du C peut être appliqué a d'autre language de programmation...


                On est en programmation générale pour des systèmes de bureau ici ; je ne vois pas pourquoi tu viens nous sortir ça... Après je m'excuse si tu es un grand programmeur industriel mais ici on est sur des cours destiné à une généralité, pas des cas spécifiques.

                Citation

                C'est n'est pas tout de connaitre le C, il y a une logique derrière!


                Encore faut-il connaître le C...

                Citation

                Je réctifie le #define NOM_DE_LA_VARIABLE valeur


                Ce n'est pas une variable globale puisque ce n'est pas une... variable mais c'est une donnée qui pourra être utilisée dans tout le programme.



                Citation

                Pour le void main mythe ou pas... On peut discuter des heures.


                Encore une fois, monsieur le grand codeur de microcontrolleur, je vous fais remarquer que nous programmons sur des systèmes de bureau avec un C dit "hosted", donc avec l'intégralité de la lib standard _et_ le fait que main doive être défini comme
                int main(void)
                ou
                int main(int argc, char *argv[])
                au choix mais pas void main(). C'est tout simplement inscrit dans le standard et ça a toujours été ainsi... void main peut exister mais c'est illégal. Je veux bien que certains compilos l'acceptent mais le standard dit "It shall be defined with a return type of int" (§ 5.1.2.2.1.1) c'est une restriction explicite et le C qu'on écrit doit respecter cette règle.

                Citation

                Pour les #ifndefine je vois pas le problème? J'utilise ça souvent! Si ce n'est que j'ai pas mis CONSTANTE...
                #ifndefine CONSTANTE
                ...


                #ifndefine est aussi standard que void main je présume...

                Citation

                préprocesseur? Jamais entendu! Comme quoi l'enseignement de l'informatique est différent d'un pays a l'autre voir même d'une école a l'autre.

                Bon maintenant on peut débattre des heures ladessu lol... Moi je fais ça pour aider c'est tout je critique pas le travail de matéo :)


                Rien n'interdit de critiquer le travail de m@t ; mais faut quand même éviter de dire des choses trop fausses...

                Citation

                Petit rajout : C'est comme le long et le int... Ici matéo utilise tout le temps long alors que dans ma maigre expérience j'ai jamais vu long mais toujours int. Vous allez me dire que c'est la même chose... Mais je suis pas d'accord!


                Tu te réponds tout seul, personne n'a dit ça. (Sauf ceux qui écouteraient trop attentivement m@t...)

                Citation

                D'abord c'est
                long int (ou int)
                unsigned int
                short unsigned int
                short int

                Normalement c'est comme ça qu'on note non? D'autant plus que mettre long nous oblige a mettre %ld dans l'affichage à la place de %d tout court... Enfin maintenant p-e qu'il y a une différence je ne sais pas!



                [note] pour l'histoire du pré-compilateur, c'est bien le terme français mais c'est une pas très logique étant donné qu'on a gardé le mot "compilateur", on devrait garder le mot "préprocesseur"
                • Partager sur Facebook
                • Partager sur Twitter

                Petites remarques sur les cours

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown