Funktion soll char array zurück geben
-
Hallo wutz,
danke dir für die Antwort.
das mit den Parametern wusste ich ja schon, das war kein Problem.
Mein Problem ist, dass ich nicht weiß, wie ich den Prototypen der Funktion definieren muss, so dass ich keinen Fehler bekomme.
Es geht um diese hässliche Schreibweise des Rückgabewertes.
-
Den Prototyp für eine definierte Funktion?
Das ist Anfängerstufe.char (*ber_nd(STAMM *bu1,GRUPPE *bg,int art,char *actdat))[2 + 1]; char (*ber_nd(STAMM *bu1,GRUPPE *bg,int art,char *actdat))[2 + 1] { static char ret[2][2+1]; return ret; }
-
*g also Wutz,
diesen Prototypen hatte ich doch schon, habe ihn doch auch schon gepostet.
Leider bekomme ich damit einen Fehler. Das ist doch genau mein Problem.
-
So, denke ich:
char (*(ber_nd(STAMM *bu1, GRUPPE *bg, int art, char *actdat)))[3] { static char ret[2][3]; return ret; }
Das wäre aber mit einem typedef deutlich lesbarer:
typedef char (*arrptr)[3]; arrptr ber_nd(STAMM *bu1, GRUPPE *bg, int art, char *actdat) { ... }
-
Hallo seldon,
das ändert leider nichts an dem fehler:
'ber_nd' declared as function returning an array
zumal ich denke nicht, dass die Addition hinten ein Problem darstellt
-
Eine Funktion kann kein Array zurückgeben. Weder in C noch in C++.
-
Die Funktion gibt aber gar kein Array zurück, sondern einen Zeiger auf ein Array. In welcher Zeile kommt die Fehlermeldung? Ist das wirklich bei
char (* ber_nd PROTO (( STAMM*, GRUPPE*, int, char* )))[ 2 + 1]
?
Bug im Compiler?
-
Bashar schrieb:
Die Funktion gibt aber gar kein Array zurück, sondern einen Zeiger auf ein Array.
Korrekt. Und das geht natürlich. Wobei es dann imo eigentlich
return &ret[i];
heißen müsste.
-
Ihr habt natürlich recht-
@Bashar: ja der Fehler kommt direkt in der Zeile:larchiv.h:274: `ber_rnd' declared as function returning an array
und das make bricht dann ab.
Hmm ob der Compiler fehlerhaft ist? Wer weiss das schon. Ist ein gcc:gcc version 2.95.3 20010315 (SuSE
-
Der Compiler ist über 10 Jahre alt...
-
Tja,
so ist das Leben. Was glaubst du wie alt die Software ist, für die hier entwickelt wird....
Aber ich muss mich bei euch bedanken.
Ich habe den Fehler gefunden.
Der Fehler liegt in dem Script, welches die Prototypen erstellt.Ich hatte hier zwar den richtigen gepostet:
char (* ber_nd PROTO (( STAMM*, GRUPPE*, int, char* )))[ 2 + 1]
aber beim compilieren hat das Erstellungsskript daraus folgendes gemacht:
char (* ber_nd PROTO (( STAMM*, GRUPPE*, int, char* ))[ 2 + 1])
So ein Dreckteil hier.
-
verwirrter schrieb:
Ich hatte hier zwar den richtigen gepostet:
char (* ber_nd PROTO (( STAMM*, GRUPPE*, int, char* )))[ 2 + 1]
Da müsste man ein Paar Klammern auch weglassen können:
char (* ber_nd PROTO ( STAMM*, GRUPPE*, int, char* ))[ 2 + 1]
Und mir fällt gerade auf, dass ein Paar Klammern in meiner Signatur auch überflüssig war (wenn auch an anderer Stelle).
Ich bin immer noch für die Typedef-Lösung; solche Signaturen kann man sonst mit Fug und Recht als Form der Kryptographie bezeichnen.
-
seldon schrieb:
verwirrter schrieb:
char (* ber_nd PROTO (( STAMM*, GRUPPE*, int, char* )))[ 2 + 1]
Da müsste man ein Paar Klammern auch weglassen können:
char (* ber_nd PROTO ( STAMM*, GRUPPE*, int, char* ))[ 2 + 1]
Nein, da PROTO höchstwahrscheinlich wie üblich ein Makro mit einem Parameter ist.