Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3152 connectés 

  FORUM HardWare.fr
  Programmation
  C

  prototypage de fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

prototypage de fonction

n°1046905
niemad
Posté le 14-04-2005 à 02:03:13  profilanswer
 

Petite question:
 
J utilise la meme fonction avec des types differents en entree, genre:

Code :
  1. void ma_fonction_float(float **tab);
  2. void ma_fonction_int(int **tab);


Y aurait pas une astuce pour eviter de devoir creer des fonction differente a chaque fois?
Le cast ne marche pas puisque j ai un pointeur de pointeur... et passer des int** a ma_fonction_float donne un desastre puisqu il s attend a lire des info de la taille float et non pas int!
 
A part creer une fonction par type de variable passe y a t il un moyen?
 

mood
Publicité
Posté le 14-04-2005 à 02:03:13  profilanswer
 

n°1046918
matafan
Posté le 14-04-2005 à 03:36:37  profilanswer
 

Tu peux toujours passer un void ** plus, d'une manière ou d'une autre, une info sur le type pointé. Est-ce que c'est mieux qu'une fonction par type ? C'est toi qui vois suivant ce que tu veux faire.
 
Ou sinon, tu passes au C++.

n°1046931
Sve@r
Posté le 14-04-2005 à 07:47:24  profilanswer
 

niemad a écrit :

Petite question:
 
J utilise la meme fonction avec des types differents en entree, genre:

Code :
  1. void ma_fonction_float(float **tab);
  2. void ma_fonction_int(int **tab);


Y aurait pas une astuce pour eviter de devoir creer des fonction differente a chaque fois?
Le cast ne marche pas puisque j ai un pointeur de pointeur... et passer des int** a ma_fonction_float donne un desastre puisqu il s attend a lire des info de la taille float et non pas int!
 
A part creer une fonction par type de variable passe y a t il un moyen?


 

void ma_fonction (void **tab, char type)
{
    switch (type)
    {
         case 'f':
             printf("%f\n", **((float**)tab));
             break;
         case 'i':
             printf("%d\n", **((int**)tab));
             break;
     }
}


Message édité par Sve@r le 14-04-2005 à 07:48:01
n°1046935
DeirElBahr​i
Posté le 14-04-2005 à 08:03:30  profilanswer
 

tu as le vaarg sinon. pense printf() qui prend n'importe quelle liste..google=> va_list

n°1046936
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-04-2005 à 08:11:45  profilanswer
 

niemad a écrit :

J utilise la meme fonction avec des types differents en entree, genre:

Code :
  1. void ma_fonction_float(float **tab);
  2. void ma_fonction_int(int **tab);


Y aurait pas une astuce pour eviter de devoir creer des fonction differente a chaque fois?


Non, à moins d'écrire du code générique avec l'interface suivante (à-la-qsort()) :  

void f (void *tab, size_t size_elem, size_t nb_x, size_t ,nb_y);


qui permet de traiter les elements d'un tableau quelquonque linéaire à deux dimensions. Dans la fonction, on travaille en bytes, et on calcule les indices avec les dimensions. Les affectations se font à coup de memcpy(). Par contre, étant donné qu'on ne sait  pas la nature des données du tableau, on ne peut faire ausun calcul sur les données. Mias, (comme avec qsort()), ce calcul peut être délégué à une fonction utilisateur (callback).
 


/* type du callback (adresse et coordonnees courantes...) */
typedef int scan_data_f (void *p_data, size_t x, size_t y);
 
void f (void *tab, size_t size_elem, size_t nb_x, size_t ,nb_y, scan_data_f *pf_calcul);



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1047193
niemad
Posté le 14-04-2005 à 11:57:52  profilanswer
 

Merci a tous.
J avais effectivement pas pense a utilise le type void  :sweat: Ca va me servir dans certaine fonction deja ca c est sure.

n°1047236
Sve@r
Posté le 14-04-2005 à 12:27:22  profilanswer
 

niemad a écrit :

Merci a tous.
J avais effectivement pas pense a utilise le type void  :sweat: Ca va me servir dans certaine fonction deja ca c est sure.


 
Pas "void", "void **" [:aloy] (ou à la rigueur "void *" dans un cadre plus général...)

n°1047294
niemad
Posté le 14-04-2005 à 13:11:17  profilanswer
 

Sve@r a écrit :

Pas "void", "void **" [:aloy] (ou à la rigueur "void *" dans un cadre plus général...)


 
Ouaip c est ce que je voulais dire, j ai juste eu la flemme de mettre les ** :whistle:

n°1047299
Taz
bisounours-codeur
Posté le 14-04-2005 à 13:16:21  profilanswer
 

tout ça c'est bien joli, mais par rapport à du template ou de la surcharge C++, en termes de performance ... c'est catastrophique :/

n°1047317
Mackila
Posté le 14-04-2005 à 13:30:41  profilanswer
 

C'est pas la performance qui me gêne, c'est la simplicité d'écriture... Mais bon c'est du C, avec ses avantages et ses limitations...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  prototypage de fonction

 

Sujets relatifs
débutant PHP objet: Pb d'appel d'une fonctionExecuter fonction avec Identification Admin ... ?
Recherche fonction pour ne pas afficher le curseur ds 1 appli VBappel d'une fonction d'une iframe
java et pointeurs sur fonctionSavoir quand une fonction a été appelé pour la derniere fois
Utilisation de la fonction timecherche fonction pour lire&modifier la résolution d'écran sous windows
Comment reprogrammer la fonction strfry a partir dfe pointeur?[MFC] recherche de nom de fonction pour éviter le clipping
Plus de sujets relatifs à : prototypage de fonction


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)