IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

problème variable globale en C


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Points : 40
    Points
    40
    Par défaut problème variable globale en C
    Bonjour,

    j'ai un petit soucis: voici mon code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #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 ?
    <config>Linux Suse / Firefox 3.0.15</config>

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int ThreadJoin(Thread* thread, void* status)
    {
      int rc;
      // ... ... ...
    }
    rc est déclaré dans la fonction ThreadJoin et n'est donc pas une variable globale. Merci d'utiliser la balise représentée par l'icône # pour que ton code soit bien indenté.

    A+

    Pfeuh

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    ....
    rc est déclaré dans la fonction ThreadJoin et n'est donc pas une variable globale.
    Il y a aussi une globale rc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #ifdef WIN32 /* Windows NT */
    Où est le #endif
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 32
    Points : 89
    Points
    89
    Par défaut
    Comme dit plus haut ça plante parce que tu ne ferme pas la balise préprocesseur, après son passage le code est ignoré.

    Mais en plus la variable (rc) déclarée dans le corps de la fonction surcharge la variable globale.
    Si tout est dans le même fichier source il te suffit simplement de virer la déclaration dans la fonction ThreadJoin.
    Si tu utilise la variable global dans d'autre fichier sources il faut la déclarer externe (dans le corps de la fonction) pour faire comprendre au compilo que la variable est à aller chercher ailleurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int rc; // Déclaration globale
     
    void f(void)
    {
        extern int rc; // On s'assure d'utiliser ici la variable globale.
        rc++;
    }
    Avis perso, une variable globale avec un nom aussi générique c'est source de problème, surtout si tu l'utilise dans plusieurs fichiers.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Points : 40
    Points
    40
    Par défaut
    Effectivement le problème venait du #endif . il est bien présent dans la suite du code, mais comme j'ai déclaré les variables globale dans cette partie du code, il était pas vu avec les autres fonction. il suffisait juste de le sortir
    Merci pour votre aide

Discussions similaires

  1. Problème variable globale
    Par nanoute dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/08/2009, 13h03
  2. Problème variable globale contenant un stream !
    Par palmitoto dans le forum Lisp
    Réponses: 4
    Dernier message: 25/04/2008, 05h40
  3. Problème variables globales
    Par jcatala dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 20/03/2008, 20h22
  4. problème variable globale
    Par logarithme1984 dans le forum C++
    Réponses: 10
    Dernier message: 17/01/2007, 10h22
  5. [javascript] Problème variable globale !!!!
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/08/2005, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo