Variable globale en c
Résolu
virus321
-
virus321 -
virus321 -
Bonjour,
j'ai un petit soucis: voici mon code
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 ?
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
-
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... -
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. -
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 -
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 -
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
-
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 -
-
L'erreur vient peut-être du type de rc, passe "SWIrecAPI.h" et "SWIepAPI.h" au peigne fin
-
-
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.
-
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