Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déclaration

Sujet résolu
    22 février 2022 à 17:32:31

    Bonjour 🙂

    Voici une fonction qui multiplie les nombres par 3 :

    #include <stdio.h>
    
    int triple (int number)
    
    {
    return 3*number;
    }

    À première vue, ça m'a paru bizarre, du coup avant celle-ci j'ai rajouté la déclaration suivante:

    int triple = 0, number = 0;

    Mais après compilation j'ai eu une erreur qui ne s'est corrigée qu'après avoir supprimé les déclarations que je venais d'ajouter.

    Donc voici ma question : est-ce que les fonctions ne peuvent pas être déclarée ? Pourquoi ?

    Merci infiniment ! 🙏🙏🙏


    -
    Edité par Chocou 22 février 2022 à 17:34:47

    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2022 à 17:48:52

      Oui on peut les déclarer, mais pas de la façon dont tu l'as fait:
      int triple(int n);
      Il faut que tu lui dises le type des paramètres.

      On le fait au début avant la définition de la fonction elle-même.

      On met souvent la déclaration au début et la définition après le main.

      Tu peux déclarer int number dans le main.

      -
      Edité par PierrotLeFou 22 février 2022 à 17:51:05

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        22 février 2022 à 18:21:40

        J'ai crains que ne m'avez pas bien compris.Voici le code en entier :

        #include <stdio.h>
         
        int triple (int number)
         
        {
        return 3*number;
        }
        
        int main ()
        {
        int user = 0;
        printf ("Enter your number : ");
        scanf ("%d", &user);
        printf ("Your number is tripled : %d\n", triple (user));
        return 0;
        }


        Et voici ce que j'ai fait :

        #include <stdio.h>
         
        int triple = 0, number = 0;
        
        int triple (int number)
         
        {
        return 3*number;
        }
        
        int main ()
        {
        int user = 0;
        printf ("Enter your number : ");
        scanf ("%d", &user);
        printf ("Your number is tripled : %d\n", triple (user));
        return 0;
        }



        • Partager sur Facebook
        • Partager sur Twitter
          22 février 2022 à 18:34:29

          @Pierrot a très bien compris, et t'a donné la bonne réponse.

          int triple(int n);  (<-- bien noter la présence du ';') déclare que triple est une fonction qui reçoit un int et qui renvoie un int.

          Maintenant, en ajoutant ta ligne, tu déclares en ligne 3 que triple est un entier, et ligne 5 tu dis que triple est une fonction. Le compilateur te signifie son désaccord.

          -
          Edité par edgarjacobs 22 février 2022 à 18:37:42

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            22 février 2022 à 19:15:08

            int triple = 0;

            Là, tu déclares un entier de type int nommé triple !


            int triple(int number)
            {
                return 3*number;
            }

            Là, tu définies une fonction nommé triple ! (Elle vaut déclaration si tu l'utilises plus loin dans le même fichier source).


            Si tu voulais déclarer ta fonction il fallait écrire :

            int triple(int number);

            Pour ce qui est de number, il est déjà déclaré comme paramètre de la fonction. C'est une variable locale à la fonction qui est affectée avec la valeur passé en paramètre lors de l'appel de la fonction.



            • Partager sur Facebook
            • Partager sur Twitter
            ...
              23 février 2022 à 16:37:47

              Le compilateur te voit faire, et il proteste

              $ gcc -Wall -Wextra a.c
              a.c:5:5: error: ‘triple’ redeclared as different kind of symbol
                  5 | int triple (int number)
                    |     ^~~~~~
              a.c:3:5: note: previous definition of ‘triple’ was here
                  3 | int triple = 0, number = 0;
                    |     ^~~~~~
              

              > Mais après compilation j'ai eu une erreur

              Ca aurait été sympa que tu nous dises laquelle, c'est pas qu'on n'aime pas jouer aux devinettes....

              > qui ne s'est corrigée

              Tu aurais d'ailleurs gagné du temps en LISANT le message plutôt qu'en imaginant qu'elle va se corriger (toute seule ?) à force d'ajouter et enlever des lignes au hasard.

              C'est pas compliqué : ligne 5 il y a une redéfinition de triple qui a été déjà déclaré ligne 3, mais d'une autre espèce.

              Si tu as des erreurs, c'est normal, et ce n'est pas parce que tu es débutant. Tout le monde fait des erreurs. La différence, c'est que quand on est moins débutant, on lit les messages parce qu'on y trouve des indications sur ce qui ne va pas. Ce qui va plus vite que d'aller poster sur les forums.

              -
              Edité par michelbillaud 23 février 2022 à 16:39:53

              • Partager sur Facebook
              • Partager sur Twitter

              Déclaration

              × 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