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 :

comment convertir type void ou struct en type booléen?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 371
    Par défaut comment convertir type void ou struct en type booléen?
    bonjour,

    1)Comment convertir type void en type booléen?
    2)Comment convertir type struct en type booléen?


    merci de votre aide

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Bonjour.



    Donne-nous au moins une ligne de code, voir deux si ça ne te déranges pas . On pourra alors peut-être te donner une réponse.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Tu as des questions assez pharaoniques toi. Quand ce n'est pas comment écrire dans la dernière case de ma RAM c'est comment convertir un type void (donc un truc qui n'existe pas) en booléen. Tu sais que tu es en bonne voie pour devenir notre clown 2022 ?...

    Donc le type "void" (1), type qui ne peut s'appliquer qu'à une fonction (parce que pour une variable, dire "cette variable n'a pas d'existence" c'est un petit peu et inutile et surtout impossible) est un type particulier permettant de dire "cette fonction ne retourne rien". Or convertir un "rien" (un truc qui n'existe pas) en booléen (truc valant vrai ou faux) c'est un petit peu difficile donc les concepteurs du C ont préféré faire l'impasse là dessus. Cela t'avait déjà été dit ici par koala01 qui écrit "car la fonction écrit est de type void, ce qui signifie qu'elle ne renvoie aucune donnée. Ce qui va forcément poser problème vu que l'on va essayer de tester ... la valeur renvoyée par cette fonction". (1)JAttention, je parle bien du type "void" et non pas du du type "void étoile" qui n'est pas du tout la même chose...

    Pour un type struct lui c'est déjà un truc un petit peu plus consistant. Donc oui on peut convertir un type struct en booléen. Suffit de le tester simplement car comme je l'avais dit ici, toute valeur non nulle est considérée comme vraie. Sauf qu'ayant du mal à voir comment une variable de type struct pourrait valoir 0 (donc du mal à voir comment elle pourrait être considérée comme faux) je me demande à quoi un test qui est toujours vrai peu en réalité servir. Peut-être si tous ses membres sont à 0 ça peut le faire mais je n'ai même pas envie d'essayer car si je remonte la réflexion au niveau au dessus, je ne vois pas à quoi cela servirait pour un algo de tester cela. Ben oui, j'ai du mal à imaginer un algo qui ferait un choix crucial selon le fait que ma variable de type struct a ou n'a pas tous ses champs à zéro. Faire un choix sur une valeur particulière d'un champ particulier de ma structure oui, cela peut s'envisager, mais selon le fait que tout est (ou n'est pas) à zéro là...

    Mais bon, comme tu l'as si bien dit, vu que je raconte n'importe quoi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut
    Bonjour
    Le type void peut être appliqué ou utilisé avec une variable de type adresse (un pointeur) pour signifier ou indiquer une absence d'information sur le type des données à l'adresse qu'admet la variable.



    • Il peut être utilisé comme type de fonction comme déjà mentionné pour indiquer que la fonction ne retourne rien




    • Il peut aussi être utilisé comme argument d'une fonction pour signifier que la fonction n'admet aucun argument




    • Il peut également être utilisé sous cette forme (void) « cast » sur des fonctions pour indiquer au compilateur que nous ignorent volontairement la valeur de retour d'une fonction ou ne souhaitant pas utilisé la valeur de retour de la fonction.

    à bientôt.

  5. #5
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 329
    Par défaut
    Le type "void" peut-être utilisé sous sa forme pointeur comme "pointeur générique"... c'est surtout utile dans le cadre de l'utilisation des fonctions pour ne pas devoir écrire une fonction pour chaque type de données manipulées dans un programme donné (surtout avec des listes chaînées qui peuvent contenir des données qui ne sont pas toutes du même type).

    La fonction Compare(), par exemple, pourrait (à l'instar du polymorphisme en Orienté Objet) s'écrire void* Compare(void*,void*) pour retourner "n'importe quoi" et accepter "n'importe quoi" comme type de données en paramètres.
    Toute la difficulté consiste à implémenter cette fonction pour être "vraiment générique"... c'est pas évident à mettre en oeuvre mais avec du courage c'est possible.

  6. #6
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 371
    Par défaut
    Tu as oublié aussi d'ouvrir un bouquin de C élémentaire avant de faire du C avancé (retour de structures, etc), bouquin expliquant aussi qu'en C de base, toute valeur non nulle est considérée comme vrai (c'est aussi le cas en C avancé sauf que là on ne le dit plus tellement c'est devenu implicitement connu).
    Dans ce 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    #include <stdio.h>
    #include <string.h>
     
    int A,B,C;
     
    struct vecteur3{
      int x;
      int y;
      int z;
    };
     
    typedef struct vecteur3 vecteur;
     
    vecteur fonction(int a,int b,int c){
      vecteur V;
      V.x=a;
      V.y=b;
      V.z=c;
      return V;
    }
     
    int  main(void) {
      printf("Hello World\n");
     
      //si fonction est appelée
     if (fonction(A,B,C) ) //là ça ne marche pas bien que fonction(A,B,C) retourne quelque chose de non nul donc vrai
      {
          printf("fonction appelée"); 
      }
      else {
          printf("la aussi, la fonction a été appelée");
      }
      return 0;
    }

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tabkelm Voir le message
    Dans ce code...
    Mouais. Y a-t-il là une question? Ou même y a-t-il ne serait-ce qu'un simple verbe pour avoir alors une simple phrase?

    Ok, il ne compile pas parce que la fonction retourne une structure et que, contrairement à ce que je pensais, une structure n'est pas assimilable à un booléen (used struct type value where scalar is required). C'est vrai j'ai donc dit n'importe quoi. Tu dois être excité comme une petite puce d'avoir réussi à le démontrer
    Et donc? Où est-ce que cela nous mène? Parce que (remontons comme je l'ai dit un niveau au dessus) qu'est-ce que tu cherches à faire en réalité? Qu'est-ce que tu veux donc tester avec ton if (fonction(...))? Si elle a été appelée? Ben évidemment qu'elle l'a été. Si elle a retourné une structure? Ben évidemment qu'elle l'a retournée (c'est son travail). D'ailleurs ton code montre assez bien que ce test ne mène nulle part avec ton superbe "si oui la fonction a été appelée et si non alors là aussi la fonction a été appelée". J'ai rarement vu une alternative plus inutile dans un programme...

    Donc bon ben voilà. Un truc n'ayant aucune utilité logique, plutôt normal qu'il ne puisse pas se faire. De mon côté n'ayant jamais eu l'idée de programmer un truc aussi stupide, c'est assez naturel que je ne sache pas comment ce code se comporterait avant de l'avoir essayé. Bref ma seule erreur a été de penser que tu avais un vrai besoin intelligent et d'essayer pour y répondre de faire une extrapolation gratuite à partir d'une base connue (une valeur nulle est considérée fausse et non nulle vraie) en pensant qu'elle s'adapterait à une structure, chose qui ne peut pas se faire parce qu'en réalité on n'a pas besoin de le faire.

    Donc la prochaine fois, au lieu de nous poser un problème XY, dis-nous plutôt ce qui te pose souci et non pas comment coder les trucs tordus que tu as imaginé pour les résoudre.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/04/2007, 12h39
  2. comment convertir un variant de type NULL en double
    Par pierrot67 dans le forum Bases de données
    Réponses: 6
    Dernier message: 03/11/2006, 12h37
  3. comment convertir type string to Hkey ? :(
    Par xenoali dans le forum Delphi
    Réponses: 2
    Dernier message: 17/10/2006, 14h16
  4. [C#] Comment convertir un type long en DateTime ?
    Par guillaume16 dans le forum C#
    Réponses: 4
    Dernier message: 22/06/2006, 14h45
  5. Réponses: 10
    Dernier message: 04/05/2006, 23h55

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