begin process at 2010 03 16 16:35:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

réécrire va_start va_arg et va_list


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

réécrire va_start va_arg et va_list

mercredi 1 mars 2006 à 21:00:49 | réécrire va_start va_arg et va_list

vangeurmasker

Membre Club
Voila la question est dans le titre. J'essaye de recoder un fonction printf sans l'aide de la biblio standard du C. Je cherche donc a remplacer les macros va_start ... par des version maison.
Si quelqu'un sait récupérer l'adresse des arguments d'une fonction.

mercredi 1 mars 2006 à 22:24:18 | Re : réécrire va_start va_arg et va_list

Alpacha

Membre Club
Je me trompe peut-être ... mais les arguments à l'appel d'une fonction doivent être dans la pile ou les registres ... donc récupération en assembleur je pense...
Cherche de ce côté là.
mercredi 1 mars 2006 à 22:41:03 | Re : réécrire va_start va_arg et va_list

bouba

Salut, c'est faisable, mais bon, au niveau de l'affichage je ne sais pas trop. En tout cas, pour réaliser une fonction qui a une nombre variable d'arguments il faut faire un truc dans ce style:
#include <stdio.h>
#include <stdarg.h>

int printf(const char* format, ...) {
    va_list ptr_arguments;
   
    // parser le paramètre format de la fonction
   // en fonction de ceci, lire les arguments, traiter char %s, %i, etc... un par un, avant
    // mettre tous les %s, %i dans un tableau par[]
    va_start(ptr_arguments, variable);
    // ici 'variable' sera d'un type différent selon %s, %i, etc... par[i] == ???
    while((variable = va_arg(ptr_arguments, type)) != 0) {
// type dépend de 'variable', int,char, etc...
       switch(type_courant) {
           case 0:
                afficher_un_entier
                 break;
          case 1:
                afficher_un_char
                break;
          ...
          ...
        }
    }
    va_end(ptr_arguments);
    return ....;
}

Voilà, en gros je pense que ça peut se faire comme ça. Sinon, tu peux peut-être regarder le code de la libc tu trouvera la vraie définition de la fonction printf (j'ai jamais regardé, ça doit vraiment être énorme !!!).

Bonne chance.
Bouba


mercredi 1 mars 2006 à 22:42:21 | Re : réécrire va_start va_arg et va_list

bouba

Pfff, je viens de relire ton msg, mon post est complètement HS, je vais me coucher la !!!!



mercredi 1 mars 2006 à 22:44:12 | Re : réécrire va_start va_arg et va_list

Alpacha

Membre Club
Lol^^
Et donc, 2eme version, tu penses que j'ai indiqué une bonne piste?
Enfin j'vois que comme ça qu'on peut le faire ...
mercredi 1 mars 2006 à 23:48:01 | Re : réécrire va_start va_arg et va_list

bouba

Oui, je pense que oui, les arguments sont à chopper dans le pile, j'ai fait un peut d'assembleur mais je ne me souvient plus trop. C'est net qu'il faut utiliser de l'assembleur. Dans mon msg HS, je conseillais d'aller regarder la définition de printf dans la libc, y'a sans doute aussi des chauses très intéressantes sur les fonctions va_start, va_arg et va_end, notamment la manière d'accéder aux arguments dans la pile.


mercredi 1 mars 2006 à 23:50:17 | Re : réécrire va_start va_arg et va_list

Alpacha

Membre Club
Ah c'est bien la pile :)
Bon courage à l'auteur du post, maintenant qu'il a la piste à suivre
jeudi 2 mars 2006 à 02:24:41 | Re : réécrire va_start va_arg et va_list

TheLudo2013

Réponse acceptée !
Je m'étais posé la même question il y a quelques temps et j'avais découvert que va_list, va_start etc. sont déclarés au niveau du compilateur et pas de la bibliothèque standard du C. En clair tu peux les conserver même si tu recode une fonction printf ( ce que j'ai fait d'ailleur et qui fonctionne très bien )...

@++
TheLudo2013


Cette discussion est classée dans : fonction, start, list, arg, réécrire


Répondre à ce message

Sujets en rapport avec ce message

Timer [ par falcon971 ] Bonjour, je cherche à réaliser un timer sous linux en C.Après toute mes recherche sur le net je n'ai pu trouver de version correspondant à mon cas.Je initialiser une liste : fonction récursive ? [ par netwebzone ] Bonjour Je dois créer une fonction qui initialise une liste chaînée à partir d'un nombre d'élement passé en paramètre pour la taille de la liste. J'ai Liste stl et fonction constante [ par poiuytrez3 ] Bonjour,J'ai une erreur de compilation lorsque je veux définir un cursor au début de ma liste qui est dans mon objet.La fonction est constante et le c Fonction prenant un type comme argument (ex : va_arg ()) [ par vinc1008881 ] Bonjour, je voudrais comment faire en C une fonction qui prend un type en argument (char int  ...) comme le fais la fonction va_arg (). Merci de vos r Fusion de cellules pour une liste chainée [ par ouhare ] Bonjour tout le monde. J'aurais une question concernant une fonction en C que j'appelerais merge_list(). Cette fonction est supposée fusionner 2 cellu question su r la fonction "str(Number)...." [ par franco82 ] bonjour, je cherche a convertir un nombre entier en chaine de charactère!pour cela j'ai trouver la fonction str(...)mais jaimerais savoir quelle inclu Problème fonction [ par Mini92 ] Plop all :)Voilà, j'ai fais cette fonction qui récupère la valeur d'une clé du registre :/*** Retourne la valeur d'une clé dans le registre* @Key  = K DLL sou VS.net2003, puis de la DLL à la XLL [ par gadzou ] Bonjour, Dans l'extension via DLL C++ des fonctionnalités de VBA, j'adoptais sous VS6.0 l'architecture .def + .h + .cpp, où le .def contenait <spa Win Api : redessiner une fenêtre [ par acryline ] Bonjour déjà Bon voilà mon problème et je seche depuis quelques heures dessus. Ce serait sympa de m'aider .Je fais un petit programme en API windows . Pointeur de function comme paramètre d'un template [ par bouba ] Bonjour, j'utilise une librairie C++ (www.antigrain.com) basée essentiellement sur les templates. Je n'arrive pas a appeler la fonction template suiv


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales