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 :

La longueur de n'importe quelle variable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut La longueur de n'importe quelle variable
    Bonjour tout le monde,
    J'essaie d'écrire une fonction qui soit un peu intelligente. Cette fonction détectera combien de caractère faut il pour écrire la variable passé envoie en paramètre.
    Ex:
    • int i=25 ->return 2
    • char caracter='c' ->return 1
    • char string[]="Bonjour" ->return 7
    • ...


    Pour le traitement, je peux me débrouiller, mais comment puis je faire en sorte que l'argument d'une fonction soit n'importe quelle variable, et puis enfin comment savoir le type de cette variable?
    Si c'est pas possible de le faire dites le...
    Merci

  2. #2
    Membre éclairé

    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Août 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 33
    Par défaut
    Je ne sais pas si c'est très propre, mais perso je passerait en argument un void* pour passer l'argument à "mesurer", et une constante (provenant tout droit d'un enum placé dans le .h correspondant) qui t'indiquerait le type de la variable.

    edit : ça donnerait un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    typedef enum{ 
        vCHAR,
        vINT,
        vSTR
    } vTypes;
     
    int size(void* sizeme, vTypes genre);

  3. #3
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    ben justement dans ce prototype j'ai besoin d'envoyer le type de variable.
    Moi je veux envoyer un type, n'importe lequel, la fonction détecte le type, et me dis sur combien de caractère il peut s'écrire.
    C'est un peu de l'encapsulation.

  4. #4
    Membre éclairé

    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Août 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 33
    Par défaut
    Oulà pour détecter le type tout seul j'ai bien envie de te dire que c'est mort D'ailleurs je le fait tiens : c'est mort

    Typiquement entre un pointeur sur un truc et un pointeur sur une chose, la différence est plus que ténue (i.e. : y'en a pas).

    Donc pour résumer, à ma connaissance : faire ce que tu demande est impossible.

  5. #5
    Membre éclairé Avatar de saad.hessane
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 315
    Par défaut
    Je me doutais un peu, merci.
    PS : Y a pas que le café que le C ne sais pas faire...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 115
    Par défaut
    A vrai dire je ne vois pas vraiment d'application concrète à ton problème, dans quel cas on aurait besoin d'une telle fonction ?

  7. #7
    Membre éclairé

    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Août 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 33
    Par défaut
    Citation Envoyé par ilys05 Voir le message
    PS : Y a pas que le café que le C ne sais pas faire...
    Un langage ne sait rien faire à proprement parler, ce sont les programmes que tu écris en utilisant ce langages qui vont "savoir" faire des choses (pour être précis ils sauront faire ce que tu aura su leur expliquer dans le langage en question )

    Si tu veux, avec du C, pouvoir traiter des variables qui détectent automagiquement leur type tout seul : écrit un compilo (en C) qui saura le faire ^^ !

    Mais, si c'est pas indiscret, pourquoi as tu besoin d'une telle fonction au fait, et pourquoi envoyer le type en argument n'est-il pas une option ?

  8. #8
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par ilys05 Voir le message
    Bonjour tout le monde,
    J'essaie d'écrire une fonction qui soit un peu intelligente. Cette fonction détectera combien de caractère faut il pour écrire la variable passé envoie en paramètre.
    Je ne comprends pas ta phrase...

    Pourrais tu donner un peu plus d'informations sur le contexte d'utilisation d'une telle fonction. La variable que tu désires fournir provient d'une saisie utilisateur?
    Si c'est le cas, ca sera forcément une chaîne de caractères. Dans le cas contraire, il t'est toujours possible de convertir un entier en chaine de caractère grâce à la fonction sprintf(). Il ne te reste plus qu'à faire un strlen(). C'est une idée!

  9. #9
    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
    Citation Envoyé par ilys05 Voir le message
    comment puis je faire en sorte que l'argument d'une fonction soit n'importe quelle variable
    Il faut utiliser un pointeur sur un type non défini : void * (ou void const * si tu ne modifies pas les données). C'est le principe de memcpy().
    , et puis enfin comment savoir le type de cette variable?
    Ca, par contre, ce n'est pas possible. C'est le prix à payer pour avoir la généricité que tu semble rechercher. Si l'information est nécessaire, il faut déléguer une partie du traitement à l'utilisateur via une fonction de callback (principe de qsort(), bsearch() etc.)

    Ca répond exactement au problème posé par http://www.developpez.net/forums/sho...32&postcount=8

    Sinon, on peut utilser des macros pour générer automatiquement le code en fonction du type... C'est assez complexe, surtout au niveau de la mise au point...

    Mais le vrai problème est le choix de champs fixes, qui plombent ta conception. Dans le réalité tout est programmable, dynamique, souple, et on a toutes les informations qui vont bien pour réaliser ce que tu fais. Évidemment, le codage est un peu plus complexe, mais ça reste abordable. Si il s'agit de code industriel, le mieux est d'utiliser un vraie base de donnée (SQL etc.) qui dispose en général des outils nécessaires pour réaliser proprement des 'états'.

Discussions similaires

  1. Comment surcharger (hook) n'importe quelle API windows ?
    Par RazielReaver dans le forum API, COM et SDKs
    Réponses: 12
    Dernier message: 05/07/2020, 18h41
  2. [Tableaux] import de variable
    Par nemo69500 dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2006, 16h34
  3. Réponses: 8
    Dernier message: 25/02/2006, 17h31
  4. Réponses: 7
    Dernier message: 23/01/2006, 11h53
  5. Imprimer un canvas sous n'importe quelle imprimante
    Par Bily.sdi dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/12/2005, 13h02

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