Problème de compilation

Résolu
Bonjour,

Je suis entrain de faire un programme en C, le code source est assez grand donc je vais mettre ici seulement la portion qui pose problème :

case SDLK_RETURN:
		tab[k] = '\0';
		if(mind)
		{
			clock_t start;
			start = clock();
		}
		if(strcmp(tab, "123") == 0)
		{
			mind = 0;
			dec(dict);
			feuvert = 1;
			if((clock() - start) > 50)
			{
			    continuer = 0;
			}
		}

En fait, le compilateur me sort cette erreur :
main.c: In function ‘main’:
main.c:167:22: error: ‘start’ undeclared (first use in this function)
if((clock() - start) > 50)
^
main.c:167:22: note: each undeclared identifier is reported only once for each function it appears in

Apparemment "start" ne serait pas déclaré... Lorsque je retire le "if(mind)" et que je déclare start normalement, il n'y a plus d'erreur...
Mais dans mon programme on entre bien dans le premier if, vu que mind est un int qui vaut 1.
Alors pourquoi le compilateur me sort cette erreur ?

Merci pour vos réponses.
--
<\EchoIsON>

4 réponses

  1. Modérateur
    "start" est déclarée sur la portée de "if(mind)" donc inaccessible dans le if suivant.
    1. Comment faire pour arranger cela...?
      Pourtant si le compilateur acceptait de compiler, ce programme fonctionnerait.
    2. Modérateur
      Déclare ta variable dans la fonction au lieu du if ...
  2. Ce n'est pas possible, car tu peux ne pas rentrer dans le premier if, mais rentrer dans le second, auquel cas start n'est pas défini.

    Si c'était le cas, alors le second if n'aurait pas de raison d'être !

    comme le dit NHenry, tu fois définir ta variable avant le premier if.
    Attention à bien l'initialiser avant de l'utiliser.

    Avant d'écrire un message, pensez que nous sommes là par passion, et par espoir de vous la communiquer: Si c'est pas génial, ça !
    1. En C, les variables sont déclarées par "bloc". Un bloc est une portion de code contenant plusieurs instructions (ou une, mais ça n'a pas d'intérêt d'utiliser un bloc quand on n'y met qu'une seule instruction) délimitée par des accolades. Tu peux faire des blocs n'importe où, pas forcément après des if des while, des case, des for etc.
      Une variable déclarée dans un bloc est automatiquement détruite à la fin du bloc.

      Donc, pour que ton code compile, il faut que tu déclares start dans un bloc supérieur à celui du if, donc par exemple juste avant le if.
      1. Merci à tous, c'est réglé (j'ai déclaré la variable avant le if).