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

Est-il possible de vérifier si une variable a été initialisée ou non en C?

Considérez l’exemple suivant,

int main(){ int a = 3, b = 7, c; if ( a > b ) c = ab; // 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 similaire à celle defined en Perl ? En Perl , je peux simplement faire if (defined c) cela vérifie si la variable est définie ou non, et renvoie False pour l’exemple ci-dessus. Comment puis-je obtenir la même chose en C?

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.

Ajouter une autre variable

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

Mauvaise question. Vous ne demandez pas si la variable est définie . Si la variable n’est pas définie, la compilation échoue. Recherchez la différence entre “déclaration” et “définition”. Dans le cas de ces variables locales, vous avez défini la variable c.

Ce que vous recherchez, c’est l’ initialisation . De nombreux compilateurs vous avertiront de l’utilisation des variables avant leur initialisation, mais si vous persistez à exécuter ce code, alors l’hypothèse est que vous en savez plus que le compilateur. Et à ce moment-là, c’est ton problème. 🙂 Certaines langues (par exemple Perl) ont un drapeau supplémentaire qui accompagne une variable indiquant si le fichier a été initialisé ou non, et ils vous cachent qu’il existe un drapeau supplémentaire dont vous pourriez avoir besoin. Si vous voulez cela en C, vous devez le coder vous-même.

Comme C ++ permet la surcharge des opérateurs, il est relativement facile de l’implémenter en C ++. Boost fournit un modèle ” optionnel ” qui le fait, ou vous pouvez le faire vous-même si vous souhaitez un exercice de codage. C n’a cependant pas le concept de surcharge d’opérateur (bon sang, le concept n’existait pas vraiment, et les compilateurs du jour n’auraient probablement pas pu le supporter de toute façon) alors vous obtenez ce que vous obtenez.

Perl est un cas particulier car il combine les deux, mais pas C. En C, il est tout à fait possible d’avoir des variables définies mais non initialisées. En fait, il existe de nombreux cas dans lesquels nous souhaitons que ce soit le cas, en particulier lorsque vous commencez à utiliser un access de bas niveau à la mémoire pour les pilotes et autres choses du même genre.

C est un langage compilé qui ne prend pas en charge la liaison de variable d’exécution, tandis que Perl est un langage interprété qui prend en charge le typage dynamic. Vous pouvez donc vérifier la définition d’une variable en Perl, mais pas en C.

Lorsque vous déclarez une variable dans C int c; , cette variable c est définie 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 rédacteur de code. Les compilateurs le font pour vous. Lors de la compilation et de la liaison de votre code C, le compilateur vérifiera les définitions de toutes les variables. Une erreur sera invoquée et le processus de compilation ou de liaison s’interrompra s’il existe des variables non définies dans votre code.

J’espère que cela vous fera distinguer les différences.