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 :

[DEBUG] petit souci lors de la compilation...


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 219
    Points : 44
    Points
    44
    Par défaut [DEBUG] petit souci lors de la compilation...
    Bonjour,

    J'utilise un tableau d'entiers à deux dimensions : tab[2][nb]; où nb représente une variable initialisée avant, deux erreurs se montrent lors de la compilation gcc lorsque je passe ce tableau comme arguments à une fonction tordre qui prends deux char* en paramètre (chaînes), pour ce faire j'appelle ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pts += tordre( choisir(tab[i][k]), choisir(tab[n-i][k]) );
    où pts est de type entier (initialisé à 0 avant.) et choisir prends un entier en paramètre et retourne un char* (il contient un switch.)


    Pourtant voici les erreurs lors de la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    invalid use of array with unspecified bounds
    called object is not a function
    Je précise que je suis sous Linux avec l'éditeur emacs...

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    est-ce que choisir retourne un pointeur sur char?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 219
    Points : 44
    Points
    44
    Par défaut
    choisir retourne un char*

  4. #4
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    tu pourrais mettre ton code complet pourqu'on voit plus clair!


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [DEBUG] petit souci lors de la compilation...
    Citation Envoyé par alex6891
    J'utilise un tableau d'entiers à deux dimensions : tab[2][nb]; où nb représente une variable initialisée avant,
    Je ne suis pas sûr qu'on puisse faire çà en C, même en C99...
    deux erreurs se montrent lors de la compilation gcc lorsque je passe ce tableau comme arguments à une fonction tordre qui prends deux char* en paramètre (chaînes), pour ce faire j'appelle ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pts += tordre( choisir(tab[i][k]), choisir(tab[n-i][k]) );
    Mauvaise pratique. L'ordre d'évaluation des paramètres n'est pas défini en C. Il vaut mieux appeler les foctions dans l'ordre requis (il peut avoir une importance, sticker les résultats dans des variables intermédiaires, et ensuite passer le résultat à la fonction...
    où pts est de type entier (initialisé à 0 avant.) et choisir prends un entier en paramètre et retourne un char* (il contient un switch.)

    Pourtant voici les erreurs lors de la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    invalid use of array with unspecified bounds
    called object is not a function
    Je précise que je suis sous Linux avec l'éditeur emacs...
    Ce qui compte c'est le compilateur... gcc ? Quelle version ? Quels reglages ?

    Sinon, pour passer l'adresse du premier élément d'un tableau à 2 dimensions, on utilise ce type de pointeur :
    ou
    X et Y sont des expressions constantes.
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Mauvaise pratique. L'ordre d'évaluation des paramètres n'est pas défini en C.
    Je pensais qu'il l'était de la droite vers la gauche...
    D'ailleurs je me suis toujours demandé qu'elle importance ca pouvait avoir qu'ils soient évalués de la droite vers la gauche ou de la gauche vers la droite... ç moins qu'il existe un autre ordre d'évaluation ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hegros
    Mauvaise pratique. L'ordre d'évaluation des paramètres n'est pas défini en C.
    Je pensais qu'il l'était de la droite vers la gauche...
    Ben non. Il n'y a que dans les expressions qu'il est défini (gauche -> droite).
    D'ailleurs je me suis toujours demandé qu'elle importance ca pouvait avoir qu'ils soient évalués de la droite vers la gauche ou de la gauche vers la droite... ç moins qu'il existe un autre ordre d'évaluation ?
    Certains esprits tordus sont capables d'écrire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%c%c", fgetc(fp), fgetc(fp));
    ou ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%d %d", i++, i--);
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par hegros
    Mauvaise pratique. L'ordre d'évaluation des paramètres n'est pas défini en C.
    Je pensais qu'il l'était de la droite vers la gauche...
    D'ailleurs je me suis toujours demandé qu'elle importance ca pouvait avoir qu'ils soient évalués de la droite vers la gauche ou de la gauche vers la droite... ç moins qu'il existe un autre ordre d'évaluation ?
    Ben imagine le code suivant (pseudo 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
     
    int funcA( int *a){
        *a *= 2;
        return 0;
    }
     
    int funcB( int *a){
        *a += 1;
        return 0;
    }
     
    void funcC( int a, int b){
    /*  rien */
    }
     
    int main(void){
        int a = 3;
     
        funcC ( funcA(&a), funcB(&a) );
        printf("%d", a);
     
        return 0;
    }
    Produira selon l'ordre d'évaluation :
    Si funcA puis funcB : 7
    Si funcB puis funcA : 8

    Donc bon, bof....
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  9. #9
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par hegros
    Mauvaise pratique. L'ordre d'évaluation des paramètres n'est pas défini en C.
    Je pensais qu'il l'était de la droite vers la gauche...
    Ben non. Il n'y a que dans les expressions qu'il est défini (gauche -> droite).
    D'ailleurs je me suis toujours demandé qu'elle importance ca pouvait avoir qu'ils soient évalués de la droite vers la gauche ou de la gauche vers la droite... ç moins qu'il existe un autre ordre d'évaluation ?
    Certains esprits tordus sont capables d'écrire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%c%c", fgetc(fp), fgetc(fp));
    ou ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%d %d", i++, i--);
    En effet, mais quelle est l'importance que l'expression ou que les arguments d'une fonction soit évalués de droite vers gauche ou l'inverse ?
    C'est pour une raison touchant a un interet particulier ? Ou bien c'est juste une termilogie que prennent les auteurs de compilateur ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  10. #10
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Si funcA puis funcB : 7
    Si funcB puis funcA : 8

    Oui


    Mais sinon oui en effet pour celui qui developpe c'est important de savoir dans quel ordre sont évalués. Je me pose la question pourquoi l'auteur du compilateur choisirai de les évalués d'un coté plutot qu'un autre ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hegros
    Mais sinon oui en effet pour celui qui developpe c'est important de savoir dans quel ordre sont évalués.
    C'est pas 'important', c'est 'indéfini'. Il faut donc écrire du code qui ne compte pas sur ce sens, qui en soit indépendant.
    Je me pose la question pourquoi l'auteur du compilateur choisirai de les évalués d'un coté plutot qu'un autre ?
    Peu importe, ce sens, il n'est pas spécifié par la norme. D'un compilateur à l'autre (voir d'une option à l'autre, qui sait...), il peut être différent et donc produire un résultat différent.
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par hegros
    Mais sinon oui en effet pour celui qui developpe c'est important de savoir dans quel ordre sont évalués.
    C'est pas 'important', c'est 'indéfini'. Il faut donc écrire du code qui ne compte pas sur ce sens, qui en soit indépendant.
    Je me pose la question pourquoi l'auteur du compilateur choisirai de les évalués d'un coté plutot qu'un autre ?
    Peu importe, ce sens, il n'est pas spécifié par la norme. D'un compilateur à l'autre (voir d'une option à l'autre, qui sait...), il peut être différent et donc produire un résultat différent.
    Merci, maintenant cela est bien clair.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

Discussions similaires

  1. [Débutant] petit soucis lors du parametrage de 2 checkbox
    Par canyouhelpme dans le forum VB.NET
    Réponses: 5
    Dernier message: 03/05/2013, 18h38
  2. Petit souci lors de la compilation
    Par argon dans le forum Unreal Engine
    Réponses: 1
    Dernier message: 23/04/2011, 22h16
  3. Petit soucis dans mon programme/compilation
    Par alessandro67 dans le forum C
    Réponses: 10
    Dernier message: 23/02/2009, 17h19
  4. Soucis lors de la compilation des source Qcad avec mac os x 10.4
    Par Ethnolius dans le forum Développement OS X
    Réponses: 2
    Dernier message: 20/05/2007, 10h57
  5. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 11h58

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