Exercices - Opérateurs
Q1 : Est ce que ce code renvoie une erreur ?
int main() {
{
int a = 1;
}
a = 2;
return 0;
}
Réponse
Le code est invalide.
On a vu ensemble les blocs de code, et qu'en C par exemple c'est les accolades qui les délimitent.
Ici a est initialisée dans un bloc, puis en dehors de celui ci on essaie d'accéder à la variable a, mais dans ce contexte d'exécution, elle n'existe pas !
Un code valide serait
int main() {
//on initialise et accède à la variable dans le meme bloc, c'est ok !
{
int a = 1;
a = 2;
}
return 0;
}
ou bien
int main() {
//ici on s'est complètement affranchi du bloc qui posait problème
//on remarque qu'on reste quand meme dans une fonction qui elle aussi est un bloc
int a = 1;
a = 2;
return 0;
}
Q2 : Plus difficile, est ce que ce code renvoie une erreur ?
int main() {
int a = 1;
{
a = 2;
}
}
Réponse
Le code est valide.
Ca peut paraître étrange, mais la ligne int a = 1 est dans le bloc de la fonction. Donc pour toute la portée de la fonction, et donc les lignes suivantes jusqu'à la fin de la fonction, la variable existe !
Quand on ouvre ensuite le petit bloc où l'on place a = 2, on hérite des objets déjà existants dont la variable a déjà existante, et on peut la modifier !
Q3 : Encore plus dur, est ce que ce code renvoie une erreur ?
int main() {
{int a = 1;} a = 2;
}
Réponse
Le code est invalide, et moche.
Ici le plus important c'est de comprendre qu'il n'y a pas vraiment de règles en C pour le formatage, comparé à d'autres langages. Regardez Les bonnes pratiques qui à un bon exemple.
En corrigeant le formatage, on peut réécrire la fonction comme ceci:
int main() {
{
int a = 1;
}
a = 2;
}
Là on comprends mieux que la ligne a = 2 ne peut pas accéder à la variable.