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 :

Les varags, warning a la compilation.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut Les varags, warning a la compilation.
    Bonjour a tous !!!

    Voila j'ai une erreur a la compilation en utilisant les varags et je ne comprends pas pourquoi, voici le probleme :

    check_modifier.c:23: warning: `short int' is promoted to `int' when passed through `...'
    check_modifier.c:23: warning: (so you should pass `int' not `short int' to `va_arg')
    En fait je fais cette operation a la ligne 23 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh = va_arg(*valist, short int);
    sh est une variable declare en short, ce que je ne comprends pas c'est pourquoi il sort un warning en me disant que j'ai "promoted" la variable en int, je ne lui ai jamais dis ca !!!

    Merci pour votre aide [/code]

  2. #2
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    Citation Envoyé par man
    type va_arg(va_list ap, type);


    va_arg
    The va_arg() macro expands to an expression that has the type and value
    of the next argument in the call. The parameter ap is the va_list ap
    initialized by va_start(). Each call to va_arg() modifies ap so that
    the next call returns the next argument. The parameter type is a type
    name specified so that the type of a pointer to an object that has the
    specified type can be obtained simply by adding a * to type.

    The first use of the va_arg() macro after that of the va_start() macro
    returns the argument after last. Successive invocations return the
    values of the remaining arguments.

    If there is no next argument, or if type is not compatible with the
    type of the actual next argument (as promoted according to the default
    argument promotions), random errors will occur.

    If ap is passed to a function that uses va_arg(ap,type) then the value
    of ap is undefined after the return of that function.
    edit: ce que je veux dire, c'est que je pense qu'il te faut un cast.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    If there is no next argument, or if type is not compatible with the
    type of the actual next argument (as promoted according to the default
    argument promotions), random errors will occur.
    Ca aurait suffit, au passage je sais lire un man...

    La ou tu pourrais peut etre me servir c'est en me disant pourquoi l'entier 42 (^^) devrait etre depiler comme un int et pas comme un short .... ???

    edit : disons que le cast je trouve ca un peut moche, j'ai trouve une maniere ou ca fonctionne : je deplie en int, et je met le resultat dans un short, mais bon ca ne m'explique toujours pas pourquoi la version precedente etait incorrect, si quelequ'un voit, merci

  4. #4
    Expert confirmé
    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
    Par défaut
    check_modifier.c:23: warning: `short int' is promoted to `int' when passed through `...'
    Comme les arguments en question de ta fonction sont décrits par ..., leur type est imprécis. Lors de l'appel à cette fonction, il y a alors des promotions par defaut qui se produisent, notamment les "petits" entiers comme short, sont convertis en int puis passés à la fonction. S'il s'agissait de char , ce serait pareil. S'il s'agissait de float, il serait passés en double. La valeur "de retour" ne pose pas ce problème : le int est alors converti en short , le type de sh.

Discussions similaires

  1. Debutant : les tests ne sont pas compilés
    Par jdvacheron dans le forum Maven
    Réponses: 1
    Dernier message: 03/07/2007, 17h19
  2. les fichiers .class ne se compilent pas à la volé?
    Par talbi404 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 20/12/2006, 19h39
  3. [Tomcat]Les fichiers *.class et la compilation
    Par scifire dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 23/09/2005, 12h31
  4. [C#] Générer un warning utilisateur à la compilation
    Par Pete dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/12/2004, 18h04
  5. [Visuel] Eliminer les triangles warning de l'explorer
    Par dinver dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 08/12/2004, 15h14

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