51 votes

Comment vérifier si une variable a été initialisée en C?

Existe-t-il un moyen de vérifier si une variable a été initialisée ou non en C?

Prenons l'exemple suivant,

 int main(){
    int a = 3, b = 7, c;

    if ( a > b )
        c = a-b;

    // Now, how can I check if the variable "c" has some value or not
    // I don't want check like this,
    // if ( isalpha(c) ) or if ( isdigit(c) )
    // or anything similar to like that
}
 

En d'autres termes, C a-t-il une fonction comme defined dans Perl . En Perl , je peux simplement faire if (defined c) qui vérifierait si la variable est définie ou non, et cela retournerait False pour l'exemple ci-dessus. Comment puis-je obtenir la même chose en C?

87voto

sharth Points 25625

C n'a pas cette capacité. Vous avez deux options principales:

Une valeur sentinelle

Par exemple, si vous savez que la valeur de c ne sera jamais négative, initialisez-la à -1 et testez-la pour cela.

Ajouter une autre variable

Créez une autre variable bool we_set_c_to_something = false; , puis définissez-la sur true lorsque vous écrivez dans c .

11voto

alijandro Points 3693

C est un langage compilé qui ne supporte pas la variable d'exécution obligatoire, alors que Perl est un langage interprété qui soutiennent la dynamique de la frappe. Ainsi, vous pouvez vérifier la définition d'une variable en Perl, mais pas en C.

Lorsque vous déclarez une variable en C int c;, cette variable c est défini mais sans initialisation. La déclaration et la définition sont dans une déclaration.

La définition d'une variable en C n'est pas vérifiée par le code de l'écrivain. Les compilateurs de le faire pour vous. Lors de la compilation et le lien de votre code en C, le compilateur va vérifier toutes les variables de définitions. Une erreur sera invoquée et la compilation ou à la liaison du processus s'arrête si il y a des variables non définies trouvé dans votre code.

Espérons que cela fera de vous distinguer les différences.

10voto

Graham Points 461

Mauvaise question. Vous n'êtes pas en se demandant si la variable est définie. Si la variable n'est pas définie alors la compilation échoue. Regardez la différence entre la "déclaration" et "définition". Dans le cas des variables locales, vous avez défini la variable c.

Ce que vous cherchez est l'initialisation. De nombreux compilateurs vais vous mettre en garde sur l'utilisation des variables avant qu'ils ne soient initialisées, mais si vous persistez dans l'exécution de ce code alors l'hypothèse est que vous savez mieux que le compilateur. Et à ce point c'est votre problème. :) Certaines langues (par exemple, Perl) ont un indicateur supplémentaire qui se déplace le long avec une variable de dire si elle a été initialisée ou non, et ils vous cacher qu'il existe un indicateur supplémentaire de la pendaison autour de laquelle vous pouvez ou ne pouvez pas besoin. Si vous voulez, dans C, vous avez besoin de coder vous-même.

Depuis C++ permet la surcharge d'opérateur, c'est relativement facile à mettre en œuvre, dans C++. Boost fournit une "option" modèle " qui est-il, ou vous pouvez rouler votre propre si vous voulez un codage de l'exercice. C n'est pas le concept de la surcharge d'opérateur si (l'enfer, le concept n'existait pas vraiment, et les compilateurs de la journée ne pourrait probablement pas pris en charge de toute façon), de sorte que vous obtenez ce que vous obtenez.

Perl est un cas particulier, car il roule les deux ensemble, mais C n'est pas. Il est tout à fait possible en C les variables qui sont définies mais non initialisé. En effet, il ya beaucoup de cas où nous voulons que ce soit le cas, en particulier lorsque vous commencez à faire des faible niveau d'accès à la mémoire pour des pilotes et des trucs comme ça.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X