IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

question très simple pour apprentissage du langage C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2022
    Messages : 6
    Par défaut question très simple pour apprentissage du langage C
    Bonjour à tous,

    Je me permet de poser une question qui sera certainement la plus simple que vous avez pu rencontrer sur ce forum
    J'essai d'apprendre le languace C en suivant les cours.
    Je ne connais absolument rien au code (jamais codé de ma vie) donc complétement débutant.
    En gros j'ai ça:

    Nom : CODE.PNG
Affichages : 842
Taille : 20,0 Ko

    Dites moi si je me trompe (au niveau de la compréhension ou des termes employés).
    En gros on a créé une fonction triple (ayant un nombre entier comme résultat) avec comme paramètre une variable que l'on appelle "nombre" qui permet de multiplier par trois un nombre choisi.

    Ensuite on créé deux autres variables (dans la fonction main); on fait notre tambouille et on arrive au moment ou on appel à la fonction triple.
    nombreTriple = triple(nombreEntre);

    J'ai bien compris comment fonctionne toutes les instructions mais mon questionnement est le suivant,
    Pour ma part, j'ai deux variables qui ont la même fonctionnalité avec deux nom différents et dans deux fonctions différentes (int nombre et int nombreEntre)
    J'ai essayé de donner le même nom à ces deux variables (ex int nombre) et ça fonctionne correctement sur codeBlock.
    C'est super con mais ça m'aide à comprendre plus facilement si je mais le même nom.
    Est ce que le fait de mettre le même nom (remplacer int nombreEntre par int nombre) peut occasionner un problème dans le cas ou mon programme aurai beaucoup plus de ligne et donc d'instruction ?

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 267
    Par défaut
    Il s'agit de ce qu'in appelle la portée des variables.

    Une variable déclarée dans une fonction a une portée locale. C'est à dire qu'elle n'est accessible qu'à l'intérieur de ta fonction. Tu peux déclarer 2 variables de même nom dans 2 fonctions différentes, mais ça n'aide pas à la lecture du code, donc à éviter.

    Si tu avais déclarée une variable juste avant ta fonction triple (donc pas dans une fonction) ce serait une variable globale, accessible depuis n'importe ou, c'est une pratique à n'utiliser qu'en cas d'absolue nécessité.

    Quand tu déclares une fonction qui attend des paramètres, tu déclares leur type et leur nom.

    Dans ta fonction triple, tu passes en paramètre un int que tu manipuleras avec le nom "nombre", qui sera une variable locale à la fonction triple.

    Quand tu appelles cette fonction ligne 16, la variable nombreEntree locale à main est recopiée dans la variable nom de la fonction triple.
    C'est ce qu'on appelle le passage par valeur. toute modification faite de la valeur de ta variable nom n'est valable que dans la fonction triple. nombreEntree n'est pas modifié. L'opérande return permet de retourner la valeur d'une variable à la fonction appelante, que tu récupère dans ton cas dans la variable nombreTriple.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    La réponse de @chrtophe n'est pas entièrement vraie

    En C, on définit 1 bloc entre 2 accolades {}

    Et donc, toutes les variables définies dans 1 bloc sont visibles que dans ce bloc : ce sont les variables locales.

    Les paramètres des fonctions/ procédures sont des variables externes dont la valeur d'initialisation vient de l'extérieur du bloc, mais visible que dans ces dernières

    D'ailleurs, depuis la norme de 1999, le C99, on n'est plus obligé de définir ses variables au début du bloc.

    Donc voila, cette notion de bloc est très importante parce que toutes les variables locales sont détruites (notamment l'utilisation des pointeurs pour les paramètres sortie et entrée/ sortie) et on peut définir des blocs n'importe quand (notamment pour créer de grosses variables temporairement)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2022
    Messages : 6
    Par défaut
    Merci pour votre retour.

    Je pense avoir compris la différence entre variable local (déclaré dans un bloc entre deux {} d'une fonction) et global (en dehors de toute fonction).
    Pour ce qui concerne les pointeurs, je ne suis pas encore arrivé à cette partie.

    Pour résumer, il vaut mieux éviter de déclarer deux variables avec le même nom dans deux fonctions différentes.

    Et d'un point de vu gymnastique (pour ma compréhension personnelle),
    Au niveau de la ligne 16; j'appelle ma fonction Triple (en la nommant) et je lui donne comme paramètre la valeur définit auparavant dans ma variable "nombreEntre".
    Donc la valeur de la variable "nombreEntre" va bien remplacer/supprimer la variable définit initialement dans les paramètres de ma fonction triple (à savoir "int nombre")
    Et ensuite, l'instruction de ma fonction "triple" va être exécutée comme ci j'avais :
    "return 3 * nombreEntre;" au lieu de "return 3 * nombre;" entre les accolades de ma fonction triple.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 839
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par babas37 Voir le message
    Pour résumer, il vaut mieux éviter de déclarer deux variables avec le même nom dans deux fonctions différentes.
    Justement non. Si le C (et d'ailleurs la majorité des langages évolués) connaissent la notion de "visibilité" (partie du code où une variable est visible), c'est justement pour faciliter la vie du programmeur qui peut mettre le nom qu'il veut à ses variables dans sa fonctionA tout en sachant qu'il pourra faire de même dans la fonctionB sans que cela ne gêne. Il n'a pas besoin de se dire "zut, j'ai déjà utilisé ce nom, il faut que j'en trouve un autre".

    Citation Envoyé par chrtophe Voir le message
    Tu peux déclarer 2 variables de même nom dans 2 fonctions différentes, mais ça n'aide pas à la lecture du code, donc à éviter.
    Hum...

    Citation Envoyé par babas37 Voir le message
    Et d'un point de vu gymnastique (pour ma compréhension personnelle),
    Au niveau de la ligne 16; j'appelle ma fonction Triple (en la nommant) et je lui donne comme paramètre la valeur définit auparavant dans ma variable "nombreEntre".
    Donc la valeur de la variable "nombreEntre" va bien remplacer/supprimer la variable définit initialement dans les paramètres de ma fonction triple (à savoir "int nombre")
    Comment entends-tu "ça va remplacer/supprimer la variable int nombre"??? Comment une variable pourrait-elle être remplacée ou supprimée??? Une variable c'est une entitée prévue pour stocker une valeur. Cette valeur pouvant changer durant la vie du programme, elle "varie" d'où le nom "variable".
    Ta fonction "triple()" est prévue pour recevoir une valeur. Cette valeur est alors stockée dans la variable "nombre" quand la fonction est activée lors de l'appel.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Citation Envoyé par babas37 Voir le message
    Au niveau de la ligne 16; j'appelle ma fonction Triple (en la nommant) et je lui donne comme paramètre la valeur définit auparavant dans ma variable "nombreEntre".
    Donc la valeur de la variable "nombreEntre" va bien remplacer/supprimer la variable définit initialement dans les paramètres de ma fonction triple (à savoir "int nombre")
    Il faut connaître
    • le C : lors d'1 appel tu vas empiler les paramètres et changer de "contexte"
    • l'algorithmie : en classe j'avais utilisé 1 méthode assez lourde mais simple à comprendre d'empilement de blocs


    En gros à la ligne 16, tu vas quitter la fonction en cours (ici main), tu vas mettre la valeur de ta variable nombreEntre (tu peux y mettre également 1 expression) dans le paramètre nombre et appeler la fonction triple.
    Et dans ta fonction triple tu ne vois que les variables locales, les paramètres (variables externes dont la valeur d'initialisation vient de l'extérieur du bloc) ... et les fameuses variables globales.

    Tu vas l'apprendre après mais tu ne fais que copier les valeurs dans les paramètres : c'est le passage par valeur.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2022
    Messages : 6
    Par défaut
    Citation Envoyé par Sve@r Voir le message

    Comment entends-tu "ça va remplacer/supprimer la variable int nombre"??? Comment une variable pourrait-elle être remplacée ou supprimée??? Une variable c'est une entitée prévue pour stocker une valeur. Cette valeur pouvant changer durant la vie du programme, elle "varie" d'où le nom "variable".
    Ta fonction "triple()" est prévue pour recevoir une valeur. Cette valeur est alors stockée dans la variable "nombre" quand la fonction est activée lors de l'appel.
    Citation Envoyé par foetus Voir le message
    Il faut connaître

    En gros à la ligne 16, tu vas quitter la fonction en cours (ici main), tu vas mettre la valeur de ta variable nombreEntre (tu peux y mettre également 1 expression) dans le paramètre nombre et appeler la fonction triple.
    Et dans ta fonction triple tu ne vois que les variables locales, les paramètres (variables externes) ... et les fameuses variables globales.

    Tu vas l'apprendre après mais tu ne fais que copier les valeurs dans les paramètres : c'est le passage par valeur.
    Ok donc en effet il n'y à pas de remplacer/supprimer la variable.
    Je vais seulement attribué la valeur de ma variable nombreEntre dans les paramètres de ma fonction triple.
    Est ce que je peux dire que je vais attribué la valeur de ma variable nombreEntre dans ma variable externe nombre ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question très simple sur les sélecteur css
    Par thessk dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/07/2015, 22h39
  2. Réponses: 6
    Dernier message: 28/07/2014, 10h09
  3. Question très simple d'affichage
    Par Vincent32 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/02/2012, 08h52
  4. question très simple mais je ne m'en souvient plus
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/11/2009, 15h04
  5. [Tableaux] question très simple
    Par H-bil dans le forum Langage
    Réponses: 14
    Dernier message: 28/05/2006, 13h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo