.| Autor | Beitrag |
|---|---|
|
000 19.04.2003, 13:33 King of Darkness |
also hallo ;) ich wollte mal wissen wie ich ne funtion schreibe wie printf() zb ich will also meiner funtionen optionale argumente mit geben danke schonmal im voraus --Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
001 19.04.2003, 14:21 Exec |
guck doch einfach mal ... "selbermachen rockt am meisten :D" - -LeJean- |
|
Profil || Suche |
|
002 19.04.2003, 14:45 Kriz |
Das geht mit der variablen Argumentliste. Du meinst sicherlich eine Funktion wie z.B. myprintf(const char* str, ...); Du brauchst dafür erstmal die Header <stdarg.h>. Dort sind drei Makros definiert mit den Namen va_start, va_arg und va_end. Das Makro va_start setzt einen Zeiger auf den Anfang der variablen Parameterliste, va_arg liest alle Parameter ein und va_end setzt den Zeiger wieder zurück. Das ganze sieht dann so aus:
Mal ein Beispiel:
Der Aufruf gestaltet sich so:
Cu PS: Hoffe, das alles richtig ist :D --K:R-I)Z++ Dieser Beitrag wurde am 19.04.2003 um 14:33 von Kriz bearbeitet. |
|
Profil || Suche |
|
003 19.04.2003, 16:19 Tron |
lass blos die finger davon! normalerweise geht das ohne absturz aus, aber spaetestens, wenn man auf die variablen parameter schreibend zugreift isses vorbei: das konstrukt sollte begraben und totgeschwiegen werden! fast, das return sollte eher so aussehen: return zaehler ? float(summe)/zaehler : 0.0f; zudem zaehler sollte ein int sein. und lass die extra-klammern um das return zurueck, das ist schlieslich keine funktion (; -- 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
004 19.04.2003, 19:01 Kriz |
Hm, summe bezieht sich auf die int-Argumente, während Zähler ja aus Natur zur Funktion bereits dem Rückgabetyp entspricht, daher float. Erspart castings :D Btw. habe ich mir die Funktion nicht selber ausgedacht, sondern ganz noobig abgepinselt aus meiner Referenz... Aber da Tron ja schon groß und weise ist, darf er das mal als Template in C++ umbauen und hier posten, hehe :P --K:R-I)Z++ |
|
Profil || Suche |
|
005 19.04.2003, 22:25 King of Darkness |
mhhh also deine meinung tron, scheint ja ziehmlich dagegen zu sein :/ aber hier mein eigendliches problem Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
006 20.04.2003, 10:22 Prefect |
Tja, das Problem ist alt und bekannt. Als pragmatischen Kompromiss verwende ich da printf()-Syntax und eine gcc-Extension, die für weitgehende Typensicherheit sorgt (ja ich weiß, das ist nicht die feine Art). In C hat man eigentlich keine andere Wahl. In C++ gibt es wie schon erwähnt Templates und Streams. Eine Bibliothek von Boost erscheint mir hier die beste Wahl zu sein. Noch besser wäre es natürlich, wenn man die Ellipsis in C++ automatisch in eine Sequenz von auf ein Proxy-Objekt angewandte Operatoren umwandeln könnte. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |

