cuserid( ... )
-
Hallo,
ich möchte fragen welche Wirkung hat folgende Zeile
char* cuserid( ... );in einer Header Datei?
Danke
-
Das deklariert eine Funktion namens cuserid, die einen Wert vom Typ char* zurück gibt und eine beliebige Anzahl an unbekannten Argumenten entgegen nimmt (sogenannte Ellipse). In C wäre es gar nicht erlaubt, dass die Funktion gar keinen anderen Parameter annimmt (also z.B.
char* cuserid(int parameter, ...);). In C++ ist es streng genommen erlaubt, aber in der Regel nicht sehr nützlich. Überhaupt ist die Benutzung von Ellipsen in C++ total überflüssig und unsicher. Es gibt andere Techniken, die sowohl einfacher zu programmieren als auch wesentlich weniger fehleranfällig wären. Die Rückgabe eines Zeigers auf einen veränderlichen(!) char ist ebenfalls höchst verdächtig.edit: Ahh, das ist ein (veralteter!) Unix-Systemaufruf, bei dem in der Anleitung nochmals ausdrücklich beschrieben wird, wie mit dem Rückgabewert umzugehen ist. Da sollte aber eigentlich ein char* als Argument stehen, keine Ellipse. Wie schon gesagt, das ist in C eigentlich ungültig und hier liegt eindeutig C vor, daher das komische Interface mit den char*.
-
Das ist eine Funktionsdeklaration, die besagt, dass es eine Funktion
cuseridgibt, die beliebige Parameter entgegennimmt und einen Zeiger auf einencharzurückgibt.
-
wie spricht man denn dann innerhalb der funktion die parameter an?
-
anti-freak schrieb:
wie spricht man denn dann innerhalb der funktion die parameter an?
Mit den Ellipsenfunktionen der C-Bibliothek:
http://www.cplusplus.com/reference/clibrary/cstdarg/Aber: Mach das nicht! In C++ ist das immer falsch. Du untergräbst damit ohne jede Not das Typensystem, das dich sonst vor Dummheiten bewahrt! 30 % aller Beiträge im C Forum sind auf falsche Typen bei scanf/printf (die mit Ellipsen arbeiten) zurück zu führen, bei denen der Compiler aufgrund der fehlenden Typinformation die Fehler nicht finden kann*.
*: Ja, ich weiß, dass der GCC diese Fehler doch finden kann, wenn man sich an bestimmte Konventionen hält. Aber er darf nur warnen, da es kein "richtiger" Fehler im Sinne der Sprache war. Und der Compiler muss Wahnsinnsarbeit verrichten, damit er diese Fehler finden kann. Dass sich das trotzdem lohnt zeigt, wie oft diese Fehler vorkommen.
-
anti-freak schrieb:
wie spricht man denn dann innerhalb der funktion die parameter an?
http://msdn.microsoft.com/en-us/library/kb57fad8(v=vs.71).aspx
va_arg, va_start, va_end
Wie SeppJ aber schon gesagt hat, in C++ verwendet man sowas eigentlich nicht.