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 :

Tester l'existence d'une variable en C


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 110
    Points
    110
    Par défaut Tester l'existence d'une variable en C
    Bonjour j' aimerais savoir comment je pourais tester l'existence d'une variable en C ?

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 562
    Points : 7 628
    Points
    7 628
    Par défaut
    Euh,

    Si la variable existe, cela compile si on s'en sert de manière correcte.
    Si elle n'existe pas ou qu'elle n'est pas accessible, cela ne compile pas!

    En aucun cas, un code compilé ne peut faire référence à une variable inexistante.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Si tu veut tester l'existence de la variable (au sens elle existe dans ton code) : soit tu compile en essayant d’accéder à la variable (si sa plante avec le code d'erreur 'undeclared' sous gcc c'est qu'elle existe pas^^), tu peut aussi dans ton IDE faire "rechercher" ou "trouver la déclaration de la variable".

    Si tu est dans un cas d'allocation dynamique (malloc) et que tu veut vérifier si la variable est bien allouer : un malloc rend NULL(0) en cas d'erreur.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 99
    Points : 110
    Points
    110
    Par défaut
    je vois, bon bah merci pour vos réponses.je me demandais si on peut faire genre :
    if( isExist(var) != "undefined")
    {
    //code
    }

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    non le c c'est pas du php^^, du moins pas à l’exécution.
    Le seul truc en C qui s’approcherait de ce que tu montre c'est les directives du préprocesseur où tu peux tester l’existence de constantes ou de macro mais pas de variables. Et c'est seulement à la compilation.

  6. #6
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 694
    Points : 2 425
    Points
    2 425
    Par défaut
    Bonjour.

    Dans les langages tels que C#/Java/PHP/Javascript, une variable est une sorte de mix entre un pointeur et une valeur, et peut valoir null/undefined.

    En C, à partir du moment où tu fais int var = 0;, ta variable existe, est déclarée, définie et est utilisable immédiatement. Pas besoin de chercher à savoir si elle est définie ou non.
    À la limite, une telle question correspond aux pointeurs, mais il vaut mieux se concentrer sur les bases du C avant de voir les pointeurs, qui sont plus difficile à maîtriser.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  7. #7
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonsoir
    Citation Envoyé par Daïmanu Voir le message
    Bonjour.
    Dans les langages tels que C#/Java/PHP/Javascript, une variable est une sorte de mix entre un pointeur et une valeur, et peut valoir null/undefined.

    En C, à partir du moment où tu fais int var = 0;, ta variable existe, est déclarée, définie et est utilisable immédiatement. Pas besoin de chercher à savoir si elle est définie ou non.
    À la limite, une telle question correspond aux pointeurs, mais il vaut mieux se concentrer sur les bases du C avant de voir les pointeurs, qui sont plus difficile à maîtriser.
    Je suis dubitatif sur ce qui a été dit sur les variables, pour faire simple une variable est par analogie une boîte étiquetée dont l’accès a son contenu est désigné par l’étiquette en question. Donc par définition, une variable est un symbole qui associe un nom à une valeur. Ainsi donc en informatique, la variable est un espace de stockage de données.

    Citation Envoyé par Daïmanu Voir le message
    Bonjour.
    Dans les langages tels que C#/Java/PHP/Javascript, une variable est une sorte de mix entre un pointeur et une valeur, et peut valoir null/undefined.
    Ce comportement dépend non pas de la variable en elle-même mais de l'information à l'emplacement de la variable.
    Le C# est un langage fortement typé. Chaque variable et constante dispose d'un type, tout comme chaque expression correspondant à une valeur. Donc a mon avis il n'y a pas une variable mix pointeur valeur source

    Citation Envoyé par Daïmanu Voir le message
    À la limite, une telle question correspond aux pointeurs, mais il vaut mieux se concentrer sur les bases du C avant de voir les pointeurs, qui sont plus difficile à maîtriser.
    La question n'est pas non plus pour les pointeurs, car les pointeurs interviennent uniquement dans un contexte de manipulation d'adresses. Le fait de mentionner ou dire que cela relève au mieux des pointeurs est une erreur tout simplement parce qu'un pointeur (si je peux le dire) est un objet dont la valeur est égale à l'adresse d'un autre objet "type *nom-du-pointeur;" où type est le type de l'objet pointé. Cette déclaration déclare un identificateur, nom-du-pointeur, associé à un objet dont la valeur est l'adresse d'un autre objet de type "type". L'identificateur nom-du-pointeur est donc en quelque sorte un identificateur d'adresse. Comme pour n'importe quelle autre valeur, sa valeur est modifiable.
    Pour résumer la chose je pense qu'il est avant tout essentiel et important de savoir qu'est ce qu'une variable en soit avant d'aborder des notions délicates.
    à bientôt
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  8. #8
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    @Les amis, on se tire une balle dans le pied là! Voilà quelqu'un qui ne connaît pas C/C++ et qui pose une question simple; quelques réponses plus tard c'est devenu un échange épicé sur la nature des pointeurs... Vous voulez lui faire peur? Le C n'a pas suffisamment mauvaise réputation comme ça?

    @G'Optimus: dans le jargon C/C++, quand tu te retrouves à tester l'existence d'une variable, on parle d' "erreur de conception"; c'est-à-dire qu'il y a un autre moyen (correct) d'aboutir au même résultat mais qu'on ne l'a pas trouvé. Quel est ton but quand tu testes l'existence de cette fonction? Quel est le contexte? Peut-être pourrions nous t'aider si tu en disais un peu plus?

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Bonjour,

    Citation Envoyé par G'Optimus Voir le message
    Bonjour j' aimerais savoir comment je pourais tester l'existence d'une variable en C ?
    Ça n'a pas de sens en C car le C est un langage compilé, dans lequel les variables sont définies à l'avance. Ton compilateur produit ensuite un exécutable où l'emplacement de l'espace à utiliser à chaque moment est connu à l'avance. Le symbole même de la variable n'existe plus dans cet exécutable si la variable est locale. Le code sait qu'il doit lire ou déposer une valeur à une adresse définie, ou à un offset de n octets par rapport à une adresse de référence, mais ne sait plus si elle s'appelle « x », « foo », « bar » ou n'importe quoi d'autre.

    Bien sûr, il reste tout-à-fait possible de réserver dynamiquement de l'espace à l'exécution mais cela ne va pas engendrer de nouveau symbole associé, puisque ceux-ci sont de toutes façons perdus passés la compilation. Il faut attribuer le résultat de la fonction d'allocation à une variable déclarée de façon ordinaire.

    Rien n'empêche de concevoir un langage interprété qui fonctionne de la même façon mais comme le programme commence à s'exécuter avant que l'on ait la moindre idée des variables qui vont être mises en jeu tout au long du processus, l'interpréteur va devoir allouer son propre espace, gérer sa fragmentation, et surtout maintenir la table des symboles utilisés pour référencer toutes ces données déclarées. À partir du moment où une telle base existe à l'exécution, alors il est techniquement possible de l'interroger.

    Citation Envoyé par sambia39 Voir le message
    Je suis dubitatif sur ce qui a été dit sur les variables, pour faire simple une variable est par analogie une boîte étiquetée dont l’accès a son contenu est désigné par l’étiquette en question. Donc par définition, une variable est un symbole qui associe un nom à une valeur. Ainsi donc en informatique, la variable est un espace de stockage de données.
    Malheureusement, cette vision des choses traduit un abus de langage, surtout lorsqu'elle est écrite en gras et même si cela correspond dans les faits à une réalité technique. J'arrive à un âge où j'aimerais personnellement lui tordre le cou. :-)

    Une « variable » est, par définition, un terme donné d'une expression évaluable et dont la valeur est justement « variable ». En mathématiques, on la note « x » parce qu'on ne connaît pas sa valeur à un instant donné, justement parce qu'elle est variable. Mais on note également « x » une inconnue, pour les mêmes raisons, inconnue qui n'est pas forcément variable. Et quand on nous fait résoudre des équations, cette inconnue est généralement tout sauf variable, parce que le problème consiste précisément à nous en faire trouver la valeur.

    Et ce n'est pas un détail. D'abord, parce qu'il est tout-à-fait possible d'utiliser le qualificatif const en C lors de la déclaration d'une variable, en faisant ainsi une « variable constante », ce qui est un oxymoron. Ensuite, parce que le terme approprié pour parler de la « petite case mémoire servant à retenir une donnée » est en principe « registre ». C'est d'ailleurs un terme tout-à-fait général, et qui n'est pas propre à l'informatique. Cela a engendré le verbe « enregistrer », on parle du « registre » d'un hôtel (le gros cahier dans lequel on consigne les noms des visiteurs), la « base de registres » de Windows porte ce nom parce qu'elle recèle justement toutes les clés servant de paramètres aux méandres du système, et par extension on l'appelle le « registre système », par analogie avec celui de l'hôtel.

    Quand on a commencé à étudier les automates, donc les machines conçues dès le départ pour remplir une tâche donnée (« précâblées », en quelque sorte), on a conçu des appareils pouvant effectuer des opérations complexes mais ces opérations étaient toujours les mêmes à une phase donnée du cycle. Dès lors qu'il a fallu soit introduire un paramètre, soit tenir compte de l'état précédent, il a fallu introduire une mémoire et ces modèles ont été naturellement baptisés « machines à registres ».

    Aujourd'hui, le terme s'est galvaudé et presque tous les programmeurs l'utilisent pour parler des « registres du processeur », donc EAX, EBX, etc. sur Intel et leurs équivalents sur les processeurs des concurrents. Mais il s'agit là d'une locution très générique, justement parce qu'il n'y avait rien de plus précis pour les désigner. Tout le contraire d'un nom propre. Durant les années 1980 et 1990, on les appelait souvent « accus », parce que les micro-processeurs les plus rudimentaires n'en possédaient généralement qu'un et qu'il servait d'accumulateur (et était donc désignés comme tel).

    Il se passe la même chose avec le mot « vecteur » que l'on utilise à tort et à travers de plus en plus souvent. Spécialement en C++, où la classe std::vector est tout sauf un vecteur, si l'on se fie à la définition de ceux-ci.

  10. #10
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    Désolé de ma réponse tardive.

    Citation Envoyé par Obsidian Voir le message
    Bonjour,
    Malheureusement, cette vision des choses traduit un abus de langage, surtout lorsqu'elle est écrite en gras et même si cela correspond dans les faits à une réalité technique. J'arrive à un âge où j'aimerais personnellement lui tordre le cou. :-)

    Une « variable » est, par définition, un terme donné d'une expression évaluable et dont la valeur est justement « variable ». En mathématiques, on la note « x » parce qu'on ne connaît pas sa valeur à un instant donné, justement parce qu'elle est variable. Mais on note également « x » une inconnue, pour les mêmes raisons, inconnue qui n'est pas forcément variable. Et quand on nous fait résoudre des équations, cette inconnue est généralement tout sauf variable, parce que le problème consiste précisément à nous en faire trouver la valeur.
    ......
    D'accord mais d'un autre côté, si l'on veut vraiment (si je peux me permettre) saisir le sens même de ce qu’est une variable, je ne dirais pas que la variable est un terme donné d'une expression évaluable mais plutôt que la variable désigne une valeur inconnue, arbitraire, quelconque.

    Si elle désigne ou représente un terme donné d'une expression évaluée, c'est tout simplement parce que l'on peut effectuer diverses opérations mais aussi parce qu'elle justifie le fait que l'antécédent de l’inconnu d'une fonction varie de même que son image ( exemple x = f(y) donc l'antécédent de « y » de la fonction varie et de ce fait x varie aussi).
    La notation X va être également, comme vous le mentionnez, la représentation d'une valeur indéterminée.

    En mathématiques, on utilise des symboles pour définir le rôle d'une fonction, des algorithmes, voir des où ensembles d’objets mathématiques et donc la variable va être un symbole pour marquer le rôle de nos algorithmes, fonctions, objets etc…
    Si l'on fait une analogie à l'informatique, la variable va être une référence de valeur qui évolue au cours du temps donc, techniquement, les variables vont être des identifications d'emplacement mémoire.
    C’est la raison pour laquelle j'ai écrit "Pour faire simple une variable est, par analogie, une boîte étiquetée dont l’accès à son contenu est désigné par l’étiquette en question. Par définition, une variable est un symbole qui associe un nom à une valeur. Ainsi en informatique, la variable est un espace de stockage de données". (Sémantiquement, en langage informatique, la variable est un emplacement).
    Je suis tout de même d'accord avec vous, si l’on veut vraiment parler d'emplacement mémoire, on parlera alors de registre.

    PS:Ne me tordez pas le coup j'y tiens

    à bientôt
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/09/2006, 11h07
  2. [débutant]Tester l'existance d'une variable
    Par Death83 dans le forum Langage
    Réponses: 7
    Dernier message: 19/08/2006, 16h37
  3. Tester l'existence d'une variable
    Par rukiaa dans le forum Langage
    Réponses: 6
    Dernier message: 15/05/2006, 00h11
  4. Tester l'existence d'une variable?
    Par Death83 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/03/2006, 22h53
  5. Réponses: 3
    Dernier message: 19/08/2005, 15h24

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