.| Autor | Beitrag |
|---|---|
|
000 25.02.2001, 22:08 CPlusPlus |
Hi. Weiss jemand von euch wie zB die Funktion sprintf funktioniert,
zB:
In der stdio.h wird die Funktion so deklariert:
Also mit ... irgendwie. Aber wie kann ich auf die Übergebenen Parameter zugreifen??? Also was ich wissen will ist wie ich selber funktionen schreiben kann die eine unbestimmte anzahl von parametern erwarten. war vorhin vielleicht ned ganz ersichtlich worauf ich hinaus will .. :)
|
|
Profil || Suche |
|
001 26.02.2001, 12:36 Buy-Menu-Man |
Hi!
Soviel ich weiß meldet der Compier da keinen Fehler, obwohl es keinen Sinn macht! Naja......wenn man aber aufpasst...... -- |
|
Profil || Suche |
|
002 26.02.2001, 12:57 TheVoice |
Ähm..... unbestimmte Zahl an Parametern?
Against TCPA | Resourcecode.de | Blender 3D | [ Darkzone | Pandorra | Alpine ] |
|
Profil || Suche |
|
003 26.02.2001, 13:57 Buy-Menu-Man |
Ooops.....das mit den Parametern hab ich ja noch gar nicht beantwortet!
Vielleicht kann dir das hier auch einer besser erklären! -- |
|
Profil || Suche |
|
004 26.02.2001, 14:09 DarKnight |
TheVoice das kann auch net sein. Denn du kannst an sprintf so viele Sachen übergeben wie du willst. Wenn du Standartwerte setzt ist das eine begrenzte Anzahl! --void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja? |
|
Profil || Suche |
|
005 26.02.2001, 15:08 Hessie J. |
Die drei Punkte nennen sich Ellipsis (kA warum) und stellen eine unbestimmte Anzahl von Parametern dar, auf die man mit va_start, va_end und va_arg zugreift (steht haarklein in der Hilfe!)
|
|
Profil || Suche |
|
006 26.02.2001, 15:14 Another1 |
jo .. mit va_start va_end und va_arg kiregt man die params und man kann ohne probleme eine function mit unbestimmter anzahl von parametern schreiben ... kommt eben nur drauf an ob es sinnvoll ist! --Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
007 26.02.2001, 16:55 CPlusPlus |
Hi. Danke für eure Antworten Werd gleich mal Probieren ob ich das check :) -- |
|
Profil || Suche |
|
008 26.02.2001, 18:02 DarKnight |
Interessant solche Funktionen. Aber ich würde sie nicht so oft benutzen, denn ich glaube dass das mit den Parametern (Ellipsis) ne Menge Speicher frisst! --void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja? |
|
Profil || Suche |
|
009 26.02.2001, 21:21 TheVoice |
Wirklich interessantes Thema :)
C ya! --Against TCPA | Resourcecode.de | Blender 3D | [ Darkzone | Pandorra | Alpine ] |
|
Profil || Suche |
|
010 27.02.2001, 15:07 blair |
Ich weiß nicht, ob es euch hilft, aber hier ist der Source einer Funktion, die Ellipsis verwendet, die Funktion ist von NeHe und dient als Print funktion in Open GL von Outline Fonts, ist ansich ganz gut kommentiert. GLvoid glPrint(const char *fmt, ...) // Custom GL "Print" Routine
if (fmt == NULL) // If There's No Text
va_start(ap, fmt); // Parses The String For Variables
for (unsigned int loop=0;loop<(strlen(text));loop++) // Loop To Find Text Length
glTranslatef(-length/2,0.0f,0.0f); // Center Our Text On The Screen glPushAttrib(GL_LIST_BIT); // Pushes The Display List Bits
because our freedom sits at the end of a gun |
|
Profil || Suche |
|
011 27.02.2001, 22:32 Prefect |
@DarKnight: So ein Käse.. das mit den Parametern verbraucht überhaupt keinen Speicherplatz (natürlich, 4Byte auf dem Stack pro Parameter, aber das ist bei anderen Funktionen auch nicht anders). Ein Funktionsaufruf foo("Blah", 15, 'c'); erzeugt immer den Assemblercode: push 'c' ; was immer der ASCII-Code für 'c' ist
Es ist völlig egal, ob die Funktion als void foo(char *str, int i, char c); oder als void foo(char *str, ...); deklariert ist.
Achja: auf die Parameter kann man natürlich mit va_XXX (siehe stdarg.h) zugreifen, aber auch direkt mit Pointern. Wer sich ein bißchen mit Assembler auskennt wird aus dem Beispiel oben raussehen, dass man z.B. auf den zweiten Parameter auch mit *((int *)str+1) zugreifen kann, wobei es wiederum bei beiden Funktionen (mit variabler Parameterzahl und ohne variable Parameterzahl) auf diese Weise möglich ist. cu,
Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
012 28.02.2001, 14:45 DarKnight |
Okay, ich bin überzeugt, Meister! =) Hatte net hundert pro nachgedacht! Thx für die Aufklärung. --void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja? |
|
Profil || Suche |

