Variable globale en c

Résolu
virus321 -  
 virus321 -
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

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  3. virus321
     
    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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      La fonction init() est-elle dans le même fichier ou dans un fichier à part ?
      0
    2. virus321
       
      dans le même fichier
      0
  4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
    1. virus321
       
      j'ai eu 5 et 6 comme résultat : le comportement normal !
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. virus321
     
    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
  7. Gaunts Messages postés 1390 Statut Membre 116
     
    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
  8. virus321
     
    :) bah on est deux à ne pas trouver l'erreur
    0
    1. Gaunts Messages postés 1390 Statut Membre 116
       
      L'erreur est toujours là si tu ne masque pas la variable?
      0
    2. virus321
       
      oui carrément !
      0
  9. Gaunts Messages postés 1390 Statut Membre 116
     
    L'erreur vient peut-être du type de rc, passe "SWIrecAPI.h" et "SWIepAPI.h" au peigne fin
    0
  10. virus321
     
    :( non ça marche pas ! je pète un câble
    0
  11. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  12. virus321
     
    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
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      C'est le problème lorsqu'on ne donne pas le code en entier : on piétine.
      0
    2. virus321
       
      :) oui mais le code fait 700 ligne je peux pas tout poster !
      0