Bonjour à tous,

Voilà je suis confronté à un petit problème: dans les blocs d'accolades, on est d'accord que les variables créées sont temporaires (elles disparaissent à la fin du bloc)?

Voici 2 codes très simples qui me chiffonnent:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
int ajoute(int & d){
  int k = d+1;
  if(k == 3){
    int e = 3;
    cout << d << endl;
  }
  cout << d << endl;
}
 
int main(){
  int d = 2;
  ajoute(d);
  return 0;
}
Me donne la sortie suivante (normal, j'ai envie de dire):
Maintenant celui-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
int ajoute(int & d){
  int k = d+1;
  if(k == 3){
    int d = 3; //cette variable a le même nom que l'argument que la fonction a recu!
    cout << d << endl;
  }
  cout << d << endl;
}
 
int main(){
  int d = 2;
  ajoute(d);
  return 0;
}
Me donne la sortie :
Le probleme, c'est donc que dans ce bloc "if{...]", je ne peux plus avoir accès à l'argument de la fonction ajoute(). Et puis même, comment le compilateur fait pour ne pas s'emmeler les pinceaux?

Bizarre, bizarre, vous avez une explication?