Unbegrenzte Parameter in Funktionen

Hallo
Es gibt ja Standardfunktionen wie „printf“, bei der die Anzahl der Parameter nicht festgelegt ist. Ich hab mir mal „stdio.h“ angeguckt. Dort steht

int printf(const char \*, ...);

Sind die drei Punkte das Symbol für unbegrenzte Parameter, und wie kann man so etwas programmieren(„stdio.c“ ist ja nicht aufzutreiben, um sichs anzugucken)
MfG, Stefan

Es gibt ja Standardfunktionen wie „printf“, bei der die Anzahl
der Parameter nicht festgelegt ist. Ich hab mir mal „stdio.h“
angeguckt. Dort steht

int printf(const char *,
…);

Sind die drei Punkte das Symbol für unbegrenzte
Parameter, und wie kann man so etwas programmieren(„stdio.c“
ist ja nicht aufzutreiben, um sichs anzugucken)

Der Mechanismus nennt sich kurz „vararg“, und du solltest dir ernsthaft überlegen, es nicht zu verwenden. Es kann damit nur schlimemr werden.

Hallo Stefan

Es gibt ja Standardfunktionen wie „printf“, bei der die Anzahl
der Parameter nicht festgelegt ist. Ich hab mir mal „stdio.h“
angeguckt. Dort steht

int printf(const char *,
…);

Sind die drei Punkte das Symbol für unbegrenzte
Parameter, und wie kann man so etwas programmieren(„stdio.c“
ist ja nicht aufzutreiben, um sichs anzugucken)

Wie Nicos schon schrieb - das ist nur was
für harte Männer und Assemblerprogrammierer.

Man braucht, um es schadenfrei anzuwenden,
einige Kentnisse über die Maschine und
die Laufzeitumgebung. Es kann funktionieren …

Es lässt sich nahezu immer eine bessere
Variante basteln (mit einem Array), aber
manchmal ist es schon ganz praktisch
(wenn auch sehr selten).

Hier mal zwei Beispiele, wie man sowas
prinzipiell verwendet. Das eine berechnet
eine Summe aus beliebig vielen Summanden
(deren Anzahl man hier angeben muss!)
sowie die Erzeugung eines formatierten
strings (ähnlich sprintf).

#include 
#include 

 int Summe\_von (int anzahl, ...)
{
 va\_list argptr; 
 int i, summe;
 
 va\_start( argptr, anzahl );
 for (i=0,summe=0; iViellecht findest Du einige
Stellen im Code, die diese Art der
Funktionen "angreifbar" machen :wink:

Grüße

CMБ

Hallo Stefan,

Es gibt ja Standardfunktionen wie „printf“, bei der die Anzahl
der Parameter nicht festgelegt ist. Ich hab mir mal „stdio.h“
angeguckt. Dort steht

int printf(const char *,
…);

Sind die drei Punkte das Symbol für unbegrenzte
Parameter, und wie kann man so etwas programmieren(„stdio.c“
ist ja nicht aufzutreiben, um sichs anzugucken)

Ich habs bis jetzt auch nur benötigt um printf() und Co. zu implementieren.

Was ganz wichtig ist:
Du musst wissen welche Datentypen da übergeben werden, es gibt keinen Mechanismus um in der Funktion die übergebenen Datentypen und deren Anzahl zu erkennen.

Bei printf() übernimmt das der Format-String.

MfG Peter(TOO)

stdio.c
Hallo Stefan,

printf und co werden wirklich nicht in stdio.c implementiert. Ansonsten hat aber nahezu jeder gute embedded-compiler, jede open source edition eine datei, in der printf implementiert ist, in der regel auch in (fast) reinem ansi-c (also ohne Assembler)

Suche einfach mal über alle sourcen nach printf. Der gesamte Code ist halt nur deshalb kompliziert, weil es so viele Formatter gibt, die alle zur Laufzeit behandelt werden wollen. Ansonsten fang bei der Erforschung der Bibliotheken vielleicht mal mit abs oder strcopy an, da sind es oft nur 5 Zeilen je C-Datei.

Viel Glück und Gruß

achim

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Achim,

Ansonsten fang bei der Erforschung der Bibliotheken vielleicht
mal mit abs oder strcopy an, da sind es oft nur 5 Zeilen je
C-Datei.

Eigentlich habe ich nur nach einem Beispiel für „vararg“ gesucht. Trotzdem Danke für den Tipp.
MfG, Stefan