Variable globale en c

Résolu/Fermé
virus321 - 30 août 2010 à 12:07
 virus321 - 30 août 2010 à 14:20
Bonjour,

j'ai un petit soucis: voici mon code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

#include "SWIrecAPI.h"
#include "SWIepAPI.h"

#define MAX_AUDIO_BUF_LEN    2000  
#define MAX_EP_AUDIO_BUF_LEN 2000
#define NUM_AUDIO_BUFS       5
#define   MAGIC_WORD         0  /* switch to 1 for magic word demo */

#ifdef WIN32 /* Windows NT */
#include <windows.h>
#include <process.h>

#define RETURN_TYPE unsigned int

typedef unsigned int (__stdcall *ThreadFunc)(void* userData);

#define usleep(x) Sleep(x / 1000)
#define DEFINE_THREAD_FUNC(funcName, userData) \
        unsigned int (__stdcall funcName)(void *userData)
#define Thread HANDLE
   
SWIrecFuncResult rc;
SWIrecRecognizer *rec =NULL;
SWIepDetector *det;
wchar_t *channelName = L"1";

int ThreadCreate(Thread* thread, ThreadFunc start_function, void* arg)
{
  *thread = (Thread)_beginthreadex(NULL, 0, start_function, arg, 0, NULL);
  return 0;
}

int ThreadJoin(Thread* thread, void* status)
{
  int rc;

  switch (WaitForSingleObject(*thread, INFINITE)) {
    case WAIT_OBJECT_0:
    case WAIT_ABANDONED:
      rc = 0;
      break;
    case WAIT_TIMEOUT:
    default:
      rc = 1;
      break;
  }
  CloseHandle(*thread);
  return rc;
}




le problème est qu'il me dit : rc undeclared first use this fonction
Je pense que rc est déclarée comme variable globale donc la fonction doit la voir?

Je me trompe ?

11 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
30 août 2010 à 14:00
Tu es bien sûr que ta variable rc est bien définie dans le même fichier que la fonction init ?
De plus, je vois un #ifdef et je ne vois pas le #endif...
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
30 août 2010 à 12:27
Bonjour,
Pouvez-vous donner le message d'erreur complet ? Car là, on ne voit pas dans quelle fonction est obtenue l'erreur.
Sinon, il faut faire attention. Vous redéclarez rc; dans la fonction ThreadJoin, ainsi la variable globale est masquée dans cette fonction.
0
en effet je me suis trompé :
l'erreur ne viens pas de la fonction threadjoin mias plutot de la fonction Init:

<code>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

#include "SWIrecAPI.h"
#include "SWIepAPI.h"

#define MAX_AUDIO_BUF_LEN 2000
#define MAX_EP_AUDIO_BUF_LEN 2000
#define NUM_AUDIO_BUFS 5
#define MAGIC_WORD 0 /* switch to 1 for magic word demo */

#ifdef WIN32 /* Windows NT */
#include <windows.h>
#include <process.h>

#define RETURN_TYPE unsigned int

typedef unsigned int (__stdcall *ThreadFunc)(void* userData);

#define usleep(x) Sleep(x / 1000)
#define DEFINE_THREAD_FUNC(funcName, userData) \
unsigned int (__stdcall funcName)(void *userData)
#define Thread HANDLE

SWIrecFuncResult rc;
SWIrecRecognizer *rec =NULL;
SWIepDetector *det;
wchar_t *channelName = L"1";

int ThreadCreate(Thread* thread, ThreadFunc start_function, void* arg)
{
*thread = (Thread)_beginthreadex(NULL, 0, start_function, arg, 0, NULL);
return 0;
}

int ThreadJoin(Thread* thread, void* status)
{
int rc;

switch (WaitForSingleObject(*thread, INFINITE)) {
case WAIT_OBJECT_0:
case WAIT_ABANDONED:
rc = 0;
break;
case WAIT_TIMEOUT:
default:
rc = 1;
break;
}
CloseHandle(*thread);
return rc;
}

int init(){


printf ("\n Calling SWIrecInit.\n");
rc = SWIrecInit(get_sample_baseline_cfg());
check_rc ("SWIrecInit", rc);

printf ("\n Calling SWIepInit.\n");
if(SWIepInit() != SWIep_RESULT_SUCCESS) {
printf("\n SWIepInit failed\n");

}

printf ("\n Calling SWIrecRecognizerCreate.\n");
rc=SWIrecRecognizerCreate(&rec,NULL,NULL);
check_rc("SWIrecRecognizerCreate",rc);

printf ("\n Calling SWIepDetectorCreate.\n");
rc = SWIepDetectorCreate(&det);
check_rc("SWIepDetectorCreate",rc);

printf ("\n Calling SWIrecSessionStart.\n");
rc = SWIrecSessionStart(rec, channelName, L"");
check_rc ("SWIrecSessionStart", rc);

}

Voila et pour le message d'erreur j'ai que rc undeclared first use this function
y'a pas autre chose !
remarque : dans la fonction Init tout les rc sont souligné en rouge dans eclipse
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
30 août 2010 à 12:56
La fonction init() est-elle dans le même fichier ou dans un fichier à part ?
0
dans le même fichier
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
Modifié par Char Snipeur le 30/08/2010 à 12:54
quel compilateur ? message d'erreur complet.
Là comme ça il n'y a pas de raison. Il manque peut être une accolade, un ";" ou autre chose.
essai de compiler ce code :
int rc;
void INIT()
{ 
   rc+=1;
}
int main()
{
    rc=5;
    printf("%d\n",rc);
    init();
    printf("%d\n",rc);
    return 0;
}

La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
0
j'ai eu 5 et 6 comme résultat : le comportement normal !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bah j'utilise eclipse avec Cygwin ! moi aussi je trouve pas d'erreur je vais essayé de regarder s'il y a un ; qui manque ou autre chose! pourtant c'a étonnerais car éclipse remarque ces erreur d'habitude
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
Modifié par Gaunts le 30/08/2010 à 13:30
Bonjour,

Je n'ai pas de compilateur sous la main, je ne peux donc pas tester, évite de masquer ta globale rc avec le:
int rc
dans ThreadJoin.
Je ne suis pas sur que ça change grand chose, mais à part ça je ne vois pas d'ou le problème peut venir
0
:) bah on est deux à ne pas trouver l'erreur
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
30 août 2010 à 13:45
L'erreur est toujours là si tu ne masque pas la variable?
0
oui carrément !
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
30 août 2010 à 13:49
L'erreur vient peut-être du type de rc, passe "SWIrecAPI.h" et "SWIepAPI.h" au peigne fin
0
:( non ça marche pas ! je pète un câble
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 août 2010 à 14:07
je te conseille de supprimer des lignes à ton programme, jusqu'à tomber sur le programme minimal qui plante. Ainsi, tu simplifie le problème, et on pourra regarder et tester chez nous.
0
exactement ça viens de ce petit truc, y a bien un #ifdef , mais j'ai déclarer les variable dedans du coup il le vois pas dans l'autre partie du code.
Problème résolu merci
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 août 2010 à 14:15
C'est le problème lorsqu'on ne donne pas le code en entier : on piétine.
0
:) oui mais le code fait 700 ligne je peux pas tout poster !
0