type en langage C

Discussion dans 'Web, design' créé par sebge2, 29 Octobre 2005.

Statut de la discussion:
Fermée.
  1. Offline
    sebge2 Touriste
    Bonjour

    Je me remet à vous ... je commence à en avoir vraiment marre de chercher !

    Voila ce que j'aimerais réaliser :

    Code:
    #define mon_type unsigned long int
    
    void ma_fonction(le_type){
     le_type i;
    }
    
    main(){
       ma_fonction(mon_type);
    }
    
    Merci d'avance :)
    sebge2, 29 Octobre 2005
    #1
  2. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    Avant tes prototypes, mais après tes inclusions :
    typedef unsigned long int mon_type;

    Ton prototype :
    void ma_fonction(mon_type i);

    Ton main :
    main(){
    ....mon_type Var;
    ....ma_fonction(Var);
    }


    Ta définition de la fonction :
    void ma_fonction(mon_type i){
    ..../* Traitement de ta variable i */
    }
    Jereck, 29 Octobre 2005
    #2
  3. Offline
    sebge2 Touriste
    non en fait j'utilise dans ma fonction un type "variable"

    en fait je fais ca pour calculer l'overflow de chaque type int

    une fois c'est un unsigned long int l'autre un unsigned short int

    le type à donner en paramètre à la fonction est donc variable

    tout le probleme est la :?
    sebge2, 29 Octobre 2005
    #3
  4. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    Je comprends pas trop ce que tu veux en fait :/
    Avec un enum{}, ça n'irait pas ? (j'en ait jamais utilisé en C donc, je sais pas trop comment on s'en sert... )
    Jereck, 29 Octobre 2005
    #4
  5. Offline
    Roudoudou Lecteur discret
    une fonction à paramètre variable ?

    essaye le polymorphisme, tu copy/pastes ta fonction et dans chaque version, tu définis un type différent pour le paramètre

    ps: ton problème est pas très bien expliqué
    Roudoudou, 29 Octobre 2005
    #5
  6. Offline
    sebge2 Touriste
    le problème c'est que je dois passer comme paramètre à la fonction un type de variable... le paramètre est un type

    j'ai un calcul qui est répétitif mais qui se fait sur une variable dont le type change


    imaginons que je dois calculer i+i où i est soit un long ou short ... et doit le rester absolument !... je dois passer le type de la variable à la fonction :?
    sebge2, 29 Octobre 2005
    #6
  7. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    c'est pas du polymorphisme ça, c'est de la surcharge de fonction (chuis en plein dedans dans mes cours :p)
    et ça n'existe pas en C
    Jereck, 29 Octobre 2005
    #7
  8. Offline
    sebge2 Touriste

    c'est pour un rapport d'OS sur l'oveflow des INT

    ca va pas etre tres propre si je copie colle en changeant le type des paramètres :D et j'aimerais que ca soit propre :wink:
    sebge2, 29 Octobre 2005
    #8
  9. Offline
    Roudoudou Lecteur discret
    pourquoi le type doit il changer ? Ne peux-tu pas réalsier ton probleme avec deux (si tu as deux types différents) avec deux fonctions de même nom mais avec des types de paramètres différents ? Ou toi tu voudrais juste avoir un genre de constante dans ton prog qui te permettrait avant compilation de choisir le type de parametre de la fonction ?
    Roudoudou, 29 Octobre 2005
    #9
  10. Offline
    Roudoudou Lecteur discret
    autant pour moi, j'avais expliquée l'idée :)

    et que ca ne marche pas en C ca je ne savais pas non plus :)
    Roudoudou, 29 Octobre 2005
    #10
  11. Offline
    sebge2 Touriste
    en fait je fais un p'tit calcul sur des int de type différent

    mais ce calcul est le meme pour tous les types d'int

    Code:
    void function_unsigned_short_int(void){
      int i;
      unsigned short int variableTest;
      variableTest=(pow_rebuilded(2,(sizeof(variableTest)*8))-1); // valeur maximum - 1
    
      printf("unsigned short int\n");
    
      for(i=1; i<=nb_results_diplays; i++,variableTest++)
        printf("%d\n",variableTest); // on affiche les valeurs
    
      return;
    }
    

    le seul truc qui change c'est la déclaration de la variable variableTest .....
    sebge2, 29 Octobre 2005
    #11
  12. Offline
    sebge2 Touriste
    une autre idée m'a traversé l'esprit :

    Code:
      int variableTest;
      int i;
    
      if(is_unsigned && is_long){ variableTest=(unsigned long int) variableTest;}
      if(is_unsigned && !is_long){ variableTest=(unsigned short int) variableTest;}
      if(!is_unsigned && is_long){variableTest=(signed long int) variableTest;}
      if(!is_unsigned && !is_long){ variableTest=(signed short) variableTest_old;}
    
    le probleme est que la variable ne change pas de type ... pourtant il passe bien par une des conditions

    pourquoi le casting ne va pas ??? :cry:

    c'est le meme si je passe par une variable intermédiaire lors du casting
    sebge2, 29 Octobre 2005
    #12
  13. Offline
    oNi- Elite
    je me demande si ta variable de destination ne doit pas être du type voulu...

    ensuite j'ai un souvenir très vague du C, mais tes conditions... (je dis p-e une énorme connerie) tu y testes quoi ? Je veux dire, y a pas de variable testée à ce moment là non ?
    oNi-, 29 Octobre 2005
    #13
  14. Offline
    sebge2 Touriste
    c'est une portion de code ... les tests ce font sur des booleans
    sebge2, 29 Octobre 2005
    #14
  15. Offline
    ImMorT4L Touriste
    C'est normal, tu déclares un int et tu y places un long... Tu mets donc une variable longue dans un espace mémoire prévu pour un int :D

    Le meilleur moyen est de passer à ta fonction une liste de paramètres variables :D

    Tu dois passer un paramètre fixe et ensuite (...):

    void ma_fonction(char *bien_obligé, ...)

    Tu a ensuite une variable de type va_list que tu initialise via va_start et que tu ferme avec va_end...

    Les paramètres peuvent être récupérés avec TYPE = va_arg(va_list, TYPE); dans une boucle while != 0 :D

    PS: Si tu comprends pas, vient me touver en MP ;)
    ImMorT4L, 29 Octobre 2005
    #15
  16. Offline
    sebge2 Touriste
    je comprend pas vraiment lol

    j'ai regardé dans le livre que j'ai sur le C et j'ai rien compris non plus ...

    enfin merci je garderai ce que j'ai ca sera plus simple !
    sebge2, 29 Octobre 2005
    #16
  17. Offline
    sebge2 Touriste
    Code:
    #include <stdio.h>
    #include <stddef.h>
    
    #define nb_results_diplays 5
    
    int pow_rebuilded(int base,int expos){
      int i;
      int returnValue = 1;
      
      for(i=1;i<=expos;i++) returnValue*=base;
      
      return returnValue;
    }
    
    void function_unsigned_short_int(void){
      int i;
      unsigned short int variableTest;  
      variableTest=(pow_rebuilded(2,(sizeof(variableTest)*8))-1); // valeur maximum - 1
    
      printf("unsigned short int\n");
    
      for(i=1; i<=nb_results_diplays; i++,variableTest++) 
        printf("%d\n",variableTest); // on affiche les valeurs 
      
      return;
    }
    
    void function_unsigned_long_int(void){
      int i;
      unsigned long int variableTest;
      variableTest=(pow_rebuilded(2,(sizeof(variableTest)*8))-1); // valeur maximum - 1
    
      printf("unsigned long int\n");
    
      for(i=1; i<=nb_results_diplays; i++,variableTest++)
         printf("%lu\n",variableTest); // on affiche les valeurs
    
      return;
    }
    
    void function_signed_short_int(void){
      int i;
      signed short int variableTest;
      variableTest=(pow_rebuilded(2,(sizeof(variableTest)*8)-1)-1); // valeur maximum - 1
      
      printf("signed short int => incrémentation \n");
    
      // incrémentation
      for(i=1; i<=nb_results_diplays; i++,variableTest++)
        printf("%d\n",variableTest); // on affiche les valeurs
    
    
      variableTest=-(pow_rebuilded(2,(sizeof(variableTest)*8)-1)); // valeur minimum + 1
    
      printf("signed short int => décrémentation\n");
    
      // décrémentation
      for(i=1; i<=nb_results_diplays; i++,variableTest--)
        printf("%d\n",variableTest); // on affiche les valeurs
    
      return;  
    }
    
    void function_signed_long_int(void){
      int i;
      signed long int variableTest;
      variableTest=(pow_rebuilded(2,(sizeof(variableTest)*8)-1)-1); // valeur maximum - 1
    
      printf("signed long int => incrémentation \n");
    
      // incrémentation
      for(i=1; i<=nb_results_diplays; i++,variableTest++)
        printf("%d\n",variableTest); // on affiche les valeurs
    
    
      variableTest=-(pow_rebuilded(2,(sizeof(variableTest)*8)-1)); // valeur minimum + 1
    
      printf("signed long int => décrémentation\n");
    
      // décrémentation
      for(i=1; i<=nb_results_diplays; i++,variableTest--)
        printf("%d\n",variableTest); // on affiche les valeurs
    
      return;
    }
    
    main(){ 
      printf("\nExercice 1\n");
            
      function_unsigned_short_int();    
      function_unsigned_long_int();
    
      function_signed_short_int();
      function_signed_long_int();  
    }
    
    sebge2, 29 Octobre 2005
    #17
Statut de la discussion:
Fermée.