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 :

[prépocesseur] expression incorrect


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Par défaut [résolu][prépocesseur] expression incorrect
    J'ai un pti problème avec un bon de code.
    Je ne met que ce qui nous intéresse:

    main.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef SYSTEM
    #ifdef MACOSX
    #define SYSTEM "macosx"
    #endif
    #ifdef LINUX
    #define SYSTEM "linux"
    #endif
    #ifdef WIN32
    #define SYSTEM "win32"
    #endif
    #endif
    main.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        #if (SYSTEM == "linux") || (SYSTEM == "macosx")
        strcpy(file_user_app_data, getenv("HOME"));
        strcat(file_user_app_data, ".");
        #else
        strcpy(file_user_app_data, getenv("APPDATA"));
        #endif
        strcat(file_user_app_data, DIRNAME_USER_APP_DATA);
    Je passe le paramètre -DWIN32 au compilateur (dev-c++).
    Il me met cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    src/main.c:39:10: token ""win32"" is not valid in preprocessor expressions
     
    make.exe: *** [obj/main.o] Error 1
    La ligne 39 c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #if (SYSTEM == "linux") || (SYSTEM == "macosx")
    Je ne comprend pas où j'ai commis l'erreur.

    ps: le WIN32 me servira plutard pour une partie de code.

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    et comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #if ((SYSTEM == "linux") || (SYSTEM == "macosx"))
    :
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Par défaut
    Non j'ai toujours la même erreur.

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Franchement là je vois pas trop, mais bon j'en profite pour donner une autre forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef SYSTEM
    #   if defined (MACOSX)
    #      define SYSTEM "macosx"
    #   elif defined (LINUX)
    #      define SYSTEM "linux"
    #   elif defined (WIN32)
    #      define SYSTEM "win32"
    #   endif
    #endif
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Par défaut
    Citation Envoyé par CSoldier
    Franchement là je vois pas trop, mais bon j'en profite pour donner une autre forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef SYSTEM
    #   if defined (MACOSX)
    #      define SYSTEM "macosx"
    #   elif defined (LINUX)
    #      define SYSTEM "linux"
    #   elif defined (WIN32)
    #      define SYSTEM "win32"
    #   endif
    #endif
    Oui c'est vrai que c'est plus clair comme ça, merci.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Par défaut
    Ca fonctionne maintenant, en fait j'avais oublié qu'on ne pouvais pas comparé des chaines avec le préprocesseur. J'ai donc du chnagé le code.

    Mais maintenant que ça fonctionne, j'ai des warnings


    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
     
    In file included from src/callback.c:27:
    C:/Documents and Settings/will/Mes documents/diDju Player/includes/main.h:40:1: warning: "WIN32" redefined
    <command line>:1:1: warning: this is the location of the previous definition
     
    In file included from src/full_interface.c:26:
    C:/Documents and Settings/will/Mes documents/diDju Player/includes/main.h:40:1: warning: "WIN32" redefined
    <command line>:1:1: warning: this is the location of the previous definition  
     
    In file included from src/main.c:28:
    C:/Documents and Settings/will/Mes documents/diDju Player/includes/main.h:40:1: warning: "WIN32" redefined
    <command line>:1:1: warning: this is the location of the previous definition
     
    In file included from src/simple_interface.c:26:
    C:/Documents and Settings/will/Mes documents/diDju Player/includes/main.h:40:1: warning: "WIN32" redefined
    <command line>:1:1: warning: this is the location of the previous definition
    Voici la partie concernée dans main.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef SYSTEM
    #      ifdef MACOSX
    #            define MACOSX 0
    #            define SYSTEM MACOSX
    #      endif
    #      ifdef LINUX
    #            define LINUX 1
    #            define SYSTEM LINUX
    #      endif
    #      ifdef WIN32
    #            define WIN32 2
    #            define SYSTEM WIN32
    #      endif
    #endif
    main.h est inclu dans plusieurs fichiers mais j'ai pourtant bien mis ifndef SYSTEM et y a aussi tout au-dessus de main.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef _MAIN_H_
    #       define _MAIN_H_

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: [prépocesseur] expression incorrect
    Citation Envoyé par will11
    J'ai un pti problème avec un bon de code.
    Je ne met que ce qui nous intéresse:

    main.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef SYSTEM
    #ifdef MACOSX
    #define SYSTEM "macosx"
    #endif
    #ifdef LINUX
    #define SYSTEM "linux"
    #endif
    #ifdef WIN32
    #define SYSTEM "win32"
    #endif
    #endif
    Marche pas.
    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
     
    #include <stdio.h>
     
    #define MACOSX 1
    #define LINUX     2
    #define WIN32    3
     
    int main (void)
    {
    #ifndef SYSTEM
    #error SYSTEM must be defined : Use -DSYSTEM=<system> with system ::= MACOSX | LINUX  | WIN32
    #if SYSTEM == MACOSX
       printf ("The system is Mac-OS/X\n");
    #elif SYSTEM == LINUX
       printf ("The system is Linux/X\n");
    #elif SYSTEM == WIN32
       printf ("The system is Win 32\n");
    #else
       printf ("Unknown system (%d)\n", SYSTEM);
    #endif
    #endif
       return 0;
    }
    et sur la ligne de commande, par exemple :
    Sans -DSYSTEM... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Compiling: main.c
    main.c:20:2: #error SYSTEM must be defined : Use -DSYSTEM=<system> with system ::= MACOSX | LINUX | WIN32
    Process terminated with status 1 (0 minutes, 0 seconds)
    1 errors, 0 warnings
    avec -DSYSTEM=LINUX

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Par défaut
    Merci

    Apprement en faisant des tests j'ai eu aussi des probs parce qu'on dirait que certaines constantes comme WIN32 ou WINNT sont déjà prises.


    Voilà ma dernière version qui fonctionne, le compilo dit plus rien dutout.

    dans main.h
    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
    #ifndef LINUX
    #       define LINUX 1
    #endif
    #ifndef WINDOWS
    #       define WINDOWS 2
    #endif
    #ifndef MACOSX
    #       define MACOSX 3
    #endif
     
    #ifndef SYSTEM
    #       error SYSTEM not defined, use argument -DSYSTEM=XXX in command line: the SYSTEM values are LINUX | WINDOWS | MACOSX.
    #endif
     
    #if (SYSTEM != LINUX) && (SYSTEM != WINDOWS) && (SYSTEM != MACOSX)
    #       error SYSTEM value is wrong: the SYSTEM values are LINUX | WINDOWS | MACOSX.
    #endif

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2000] cette expression présente une syntaxe incorrecte
    Par anestel dans le forum Access
    Réponses: 5
    Dernier message: 09/08/2009, 16h48
  2. [RegEx] Expression régulière incorrecte
    Par Freygolow dans le forum Langage
    Réponses: 8
    Dernier message: 29/05/2008, 11h57
  3. Expression régulière incorrecte
    Par popy67 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/02/2008, 19h17
  4. Expression filtre terminé incorrectement.
    Par cre3000 dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/04/2005, 19h59
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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