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 ?
A voir également:
- Variable globale en c
- Vba range avec variable ✓ - Forum VB / VBA
- Variable d'environnement temp ✓ - Forum Microsoft Office
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp - Forum Microsoft Office
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
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...
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.
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
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 :
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
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:
Je ne suis pas sur que ça change grand chose, mais à part ça je ne vois pas d'ou le problème peut venir
Je n'ai pas de compilateur sous la main, je ne peux donc pas tester, évite de masquer ta globale rc avec le:
int rcdans 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
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.