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 :

nombre d'arguments dans un ... avec va_list


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 101
    Points : 75
    Points
    75
    Par défaut nombre d'arguments dans un ... avec va_list
    salut,
    je cree des fonctions utilisant va_list mais j'aimerais savoir si/comment on peut obtenir le nombre d'arguments qui sont passé(sinon, j'ajouterai un argument qui le contient mais c'est un peu bete et la fonction serait plus sympa sans).

    merci d'avance,
    delfare

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Tout dépend de ta fonction,

    printf utilise par exemple la chaine qu'on lui passe, il compte le nombre de %X (avec X un formateur correct), et en déduit le nombre d'arguments (en fait il ne compte pas les arguments mais c'est juste pour savoir comment il ferai).

    Pour d'autres fonctions, tu peux passer le premier élément comme étant le nombre d'arguments, mais ce n'est pas toujours essentiel, tu peux utiliser une valeur particulière pour indiquer la fin du traitement.

    Tout dépend en fait de ce que tu veux faire, dis nous en plus ...

    Sinon si ça peut t'aider :

    http://alain.dancel.free.fr/c/c70_140.htm

  3. #3
    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: nombre d'arguments dans un ... avec va_list
    Citation Envoyé par delfare
    je cree des fonctions utilisant va_list mais j'aimerais savoir si/comment on peut obtenir le nombre d'arguments qui sont passé(sinon, j'ajouterai un argument qui le contient mais c'est un peu bete et la fonction serait plus sympa sans).
    Le premier argument est obligatoire et il est fait pour ça. Il donne
    • soit le nombre d'arguments
    • soit un moyen de le déterminer (ainsi que leur type) : chaine de formatteurs, code unique etc.

    Que veux-tu faire exactement ? Poste ton code. Les fonctions variadics sont très délicates et assez dangereuses. En principe on évite...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 101
    Points : 75
    Points
    75
    Par défaut
    je voudrait faire une fonction de test d'appartenance d'un point a un polygone en permettant de mettre un nombre de points illimité, tous les points seraient donc des float, si je pouvais obtenir le nombre d'argument mis dans le ..., je n'aurais pas besoin de le demander et cela serait pratique, enfin, si ce n'est pas possible, tant pis, je vais le demander dans un argument de ma fonction

  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
    Citation Envoyé par delfare
    je voudrait faire une fonction de test d'appartenance d'un point a un polygone en permettant de mettre un nombre de points illimité,
    illimité, ça n'existe pas. Il y a toujours une limite physique. Tu veux sans doute dire 'variable'.

    Moi je ferais un tableau et je passerais l'adresse du premier élément et le le nombre d'élements. Parce que dans la pratique, je ne vois pas comment tu va utiliser ta fonction... Les variadics n'ont de sens qu'à l'écriture du code. après c'est figé...
    tous les points seraient donc des float, si je pouvais obtenir le nombre d'argument mis dans le ..., je n'aurais pas besoin de le demander et cela serait pratique, enfin, si ce n'est pas possible, tant pis, je vais le demander dans un argument de ma fonction
    Comme déjà indiqué, tu peux mettre une 'sentinelle' (un NaN ou FLT_EPSILON...)

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Code de Roland Illig trouvé sur comp.std.c (limité à 63 arguments, au delà c'est le 64ième élément qui est considéré comme étant le nombre d'arguments) :

    C99
    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
    #include <stdio.h>
     
    /* The PP_NARG macro returns the number of arguments that have been
      * passed to it.
      */
     
    #define PP_NARG(...) \
             PP_NARG_(__VA_ARGS__,PP_RSEQ_N())
    #define PP_NARG_(...) \
             PP_ARG_N(__VA_ARGS__)
    #define PP_ARG_N( \
              _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,_56,_57,_58,_59,_60, \
             _61,_62,_63,N,...) N
    #define PP_RSEQ_N() \
             63,62,61,60,                   \
             59,58,57,56,55,54,53,52,51,50, \
             49,48,47,46,45,44,43,42,41,40, \
             39,38,37,36,35,34,33,32,31,30, \
             29,28,27,26,25,24,23,22,21,20, \
             19,18,17,16,15,14,13,12,11,10, \
             9,8,7,6,5,4,3,2,1,0
     
    int main()
    {
    #define A 1
    #define B 1
    #define C 1
    #define D 1
    #define E 1
     
    /* Some test cases */ 
    printf ("%d\n", PP_NARG(A));
    printf ("%d\n", PP_NARG(A,B));
    printf ("%d\n", PP_NARG(A,B,C));
    printf ("%d\n", PP_NARG(A,B,C,D));
    printf ("%d\n", PP_NARG(A,B,C,D,E));
    printf ("%d\n", PP_NARG(1,2,3,4,5,6,7,8,9,0,
             1,2,3,4,5,6,7,8,9,0,
             1,2,3,4,5,6,7,8,9,0,
             1,2,3,4,5,6,7,8,9,0,
             1,2,3,4,5,6,7,8,9,0,
             1,2,3,4,5,6,7,8,9,0,
             1,2,3));
     
    	return 0;
    }
    /* Note: using PP_NARG() without arguments would violate 6.10.3p4 of ISO C99. */

Discussions similaires

  1. [Vxi3] Nombre de résultats dans tableau avec filtre
    Par Elsa1 dans le forum Webi
    Réponses: 13
    Dernier message: 22/12/2011, 14h25
  2. insertion d'un nombre a virgule dans un champ avec un requete sql
    Par sundjata dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/05/2006, 16h29
  3. Réponses: 4
    Dernier message: 15/04/2006, 19h41
  4. Réponses: 1
    Dernier message: 06/11/2005, 17h55
  5. UNION de deux SELECT avec nombre d'arguments différents
    Par orus8 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/07/2004, 14h32

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