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

Langage C++ Discussion :

Qu'est-ce que ceci : int(*) [1];


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut Qu'est-ce que ceci : int(*) [1];
    Bonjour,
    je suis surpris d'observer que le programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main() {
      int(*) [1];
    }
    est compilé sans sourciller par g++ (y compris avec les options -Wall -pedantic : pas même le moindre "avertissement").
    Quelqu'un peut-il m'expliquer patiemment ce que son unique ligne signifie, quelle est sa syntaxe et sa sémantique ??

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    C'est un pointeur sur un tableau d'entier (ici un entier). Bref là comme ça c'est sans intérêt.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    C'est un pointeur sans nom vers un tableau de un entier ? C'est une déclaration de quelque chose (un pointeur) qui n'a pas de nom ?
    J'ai du mal...
    Je comprends ceci (qui compile aussi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main() {
      int(*a) [1];
    }
    mais ce n'est justement pas l'exemple que j'ai donné...
    J'aurais pensé que mon exemple serait aussi mal formé que, disons :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main()
    {
      int;
    }
    pour lequel g++ me dit gentiment, et en français, "déclaration qui ne déclare rien du tout"

  4. #4
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 886
    Points : 1 526
    Points
    1 526
    Par défaut
    Avec Visual Studio Express, le code suivant ne compile pas:

    error C2059: syntax error : ')'
    [edit]J'avais écrit une bêtise que je supprime[/edit]

  5. #5
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    Aurais-je mis le doigt sur une bogue de g++ ? Sais pas trop où ni comment trouver les bogues connues de g++ (une info là-dessus ?)

  6. #6
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 886
    Points : 1 526
    Points
    1 526
    Par défaut
    ...ou plutôt un comportement non prévu par les spécifications. Par contre je ne comprend pas ce que ça fait. Dans un premier temps, j'avais écrit que:
    était équivalent à
    c'est à dire un tableau de pointeurs. Sauf que si ensuite on fait:
    J'ai l'erreur:
    error C2440: '=' : cannot convert from 'int' to 'int [1]'
    dans le premier cas et pas dans le second.

    Ca a plutôt l'air de déclarer un pointeur sur un tableau, puisque dans le premier cas le code suivant se compile:

  7. #7
    screetch
    Invité(e)
    Par défaut
    Citation Envoyé par 10_GOTO_10 Voir le message
    ...ou plutôt un comportement non prévu par les spécifications. Par contre je ne comprend pas ce que ça fait. Dans un premier temps, j'avais écrit que:
    était équivalent à
    c'est à dire un tableau de pointeurs. Sauf que si ensuite on fait:
    J'ai l'erreur:

    dans le premier cas et pas dans le second.

    Ca a plutôt l'air de déclarer un pointeur sur un tableau, puisque dans le premier cas le code suivant se compile:
    dans le premier cas, c'est un pointeur sur des tableau de 1 entier
    dans le second cas, c'est un tableau de 1 pointeur sur des entiers
    c'est a ca que servent les parenthèse (pour changer l'associativité de *)

    mais effectivement c'est une declaration qui ne sert a rien elle devrait etre rejetée par les compilateurs

  8. #8
    screetch
    Invité(e)
    Par défaut
    (a noter que sunCC aussi se plaint du code plus haut)

Discussions similaires

  1. Est ce que ceci est un bug ou non
    Par saha84 dans le forum Scilab
    Réponses: 0
    Dernier message: 26/03/2015, 13h40
  2. Est-ce que je peux faire ceci ?
    Par Seb04 dans le forum MySQL
    Réponses: 3
    Dernier message: 20/10/2014, 21h35
  3. qu'est ce que c'est ? *(int *)a;
    Par salif98 dans le forum C
    Réponses: 18
    Dernier message: 30/09/2006, 13h31
  4. Qu'est-ce que c'est que Nessus, ça fait quoi exactement ?
    Par PeterT dans le forum Développement
    Réponses: 3
    Dernier message: 24/07/2002, 11h23
  5. Réponses: 3
    Dernier message: 19/07/2002, 15h01

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