Bonjour j' aimerais savoir comment je pourais tester l'existence d'une variable en C ?
Bonjour j' aimerais savoir comment je pourais tester l'existence d'une variable en C ?
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.
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.
je vois, bon bah merci pour vos réponses.je me demandais si on peut faire genre :
if( isExist(var) != "undefined")
{
//code
}
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.
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.
Bonsoir
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.
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
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
@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?
Bonjour,
Ç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.
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.
Bonjour,
Désolé de ma réponse tardive.
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager