Variable Anzahl an Funktionsparametern



  • Wie kann ich eine Funktion erstellen, die wie printf funktioniert?
    Also mit beliebig vielen Parametern bzw. einer variabler Anzahl an Parametern.

    Danke!
    cu para
    😃



  • Schau mal in deinem C-Buch bei der Funktion vprintf nach.



  • Schau dir va_start va_arg und va_end an

    @Gary
    das ist nützlich, wenn man printf wrapped, aber was paranoiac meint ist, glaub ich, wie man so etwas selbet macht.



  • inline void print(int x, int y, char* text,...)
    {
        char textBuffer[512];
        va_list args;
        va_start(args, text);
        vsprintf(textBuffer, text, args);
        va_end(args);
        g_win->OutText(x,y,textBuffer);
    }
    

    Das ist eine Funktion aus einer Lib. Deshalb beachte das x und y sowie die Funktion OutText() nicht.



  • kann man das denn überhaupt feststellen??? mit asm könnte man den stack untersuchen und das rausfinden, aber mit C??? hab auch schon mal eine eig. printf-routine geschrieben. da die sich aber auf den format-string bezieht, ist es da ja unerheblich, wie viele parameter mitgegeben wurden. nur wenn es zu wenig sind, kann es sein, das er müll anzeigt...

    cu todo



  • EDIT: Käse ... 🙂

    [ Dieser Beitrag wurde am 02.01.2003 um 10:29 Uhr von mady editiert. ]



  • häähh??? EDLIN is Käse 🙂

    cu todo



  • @paranoiac.org

    C bietet doch die Möglichkeit Funktionen mit einer variablen Anzahl von Argumenten zu verarbeiten.

    Sollte ich was falsch verstanden haben? Willst du das alles selber machen?



  • Original erstellt von <Gombolo>:
    **@paranoiac.org

    C bietet doch die Möglichkeit Funktionen mit einer variablen Anzahl von Argumenten zu verarbeiten.

    Sollte ich was falsch verstanden haben? Willst du das alles selber machen?**

    Ja, ich wollte das selber machen.



  • Original erstellt von todo:
    **häähh??? EDLIN is Käse 🙂
    **

    <OT>*g*
    Nein - nach dem 'vi' ist 'edlin' einer der besten Editoren überhaupt. Zu DOS 3.x Zeiten hab' ich damit noch meine Pascal & meine ersten C-Sources geschrieben....

    btw: Wäre doch mal eine nette Programmieraufgabe, einen edlin-clone zu schreiben. IMH sollte das ohne Probleme mit Standard-C möglich sein....
    </OT>



  • @paranoiac:
    Lern Assembler, dann ist das Ganze kein Problem. Wenn du es in C++ versuchen solltest, keine Chance.



  • Original erstellt von Gary:
    @paranoiac:
    Lern Assembler, dann ist das Ganze kein Problem. Wenn du es in C++ versuchen solltest, keine Chance.

    Was redest du da für Käse?? 🙄

    para
    😃



  • Original erstellt von Gary:
    Lern Assembler, dann ist das Ganze kein Problem. Wenn du es in C++ versuchen solltest, keine Chance.

    1. geht es hier um C und 2) was hat assembler damit zu tun?

    Wenn du printf in assembler schreiben wuerdest, dann braeuchtest du auch einen format-string - woher solltest du denn sonst wissen, wieviele Elemente du poppen musst?

    Die Frage wurde ja schon geklaert - es geht in C (und somit auch in C++) mit hilfe von
    va_list, va_start, va_arg, va_end



  • paranoiac wollte die va_list doch selbst machen (so hab ichs jedenfalls verstanden). Das geht nicht in C !?! Da muss man sich schon mit ASM auseinandersetzen.



  • Das geht nicht in C? Sicher geht das in C, du musst ja nur Pointer manipulieren. Siehe dir mal die Implementierung in der glibc an, die ist auch in reinem ISO C



  • Original erstellt von Gary:
    paranoiac wollte die va_list doch selbst machen (so hab ichs jedenfalls verstanden). Das geht nicht in C !?! Da muss man sich schon mit ASM auseinandersetzen.

    meinst du C zaubert?

    ich hab ne schlechte Nachricht fuer dich: va_list, etc. sind alles nur makros... dh mit ner Menge Aufwand kann man sie selbst schreiben - die Frage nur warum?

    Ich kann aus paranoiac.orgs Frage nur herauslesen, dass er eine Funktion mit variablen Funktionsparametern schreiben will. Ich lese hier nichts davon, dass er die Standard Library nicht benutzen will.



  • Für va_list,... braucht man doch einen Stackpointer, es sei denn, die Funktionsargumente werden nicht auf dem Stack abgelegt (wahrscheinlich eher in den Registern, aber das weiß ich nicht). Kann mir dann bitte jemand sagen, wie man einen Stackpointer in C realisiert? Da gibts nämlich sicher tolle Verwendungszwecke für.


Anmelden zum Antworten