Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
für die profis ...
Gehen Sie zu Seite 1, 2  Weiter
 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
thedodger



Anmeldungsdatum: 07.02.2001
Beiträge: 26

BeitragVerfasst am: 08. Mai 2001 5:37   Titel: für die profis ...

ich habe hier mal ein problem für die absoluten profis unter euch ... ich weiß nämlcih nicht mehr weiter!
in meiner lib möchte ich eine funktion zur verfügung stellen, die mit einem aufruf _mehrere_ rückgaben hat.
diese rückgaben sind sowohl char's als auch int's.
sie würde ungefähr so aussehen ( nur ein ausschnitt ):
#define DESC_NAME 1
#define DESC_PASSWD 3
#define DESC_CODE 12

char *name, *passwd;
int code;

func( DESC_NAME, &name,
DESC_PASSWD, &passwd,
DESC_CODE, &code,

.
.
.

NULL );

danach will ich auf name, passwd, code ganz normal zugreifen ...

für mich ist es wichtig, mit _einem_ aufruf der funktion _einige_ oder _alle_ Werte zurückzubekommen, deswegen habe ich func() auch als elipse geplant.
e.g.

bool func( int code, ...)
{


}

allerdings habe ich keine ahnung, wie da vorgehen soll. ich hatte kurzzeitig einen (klitzekleinen) lösungsansatz, habe aber immer nur den letzten werte zurückerhalten ...

jetzt beiss ich mir schon seit 2 tagen die zähne an der lösung aus und bin nicht einen schritt weitergekommen und um ein paar haare ärmer! ;)

weiß jemand von euch einen rat?

ich weiß, das es irgendwie funktionieren muß, denn bei einem (ur)alten amigaprogramm wurde genau diese syntax genutzt ...

ich hoffe, ihr könnt mir weiterhelfen ...

Bodo
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Jochen
Gast





BeitragVerfasst am: 08. Mai 2001 10:56   Titel: Re: für die profis ...

Tja, und ob da der uralte C-Compiler vom Amiga nicht ein paar spezielle Erweiterungen hatte, die sich sonst nirgends durchgesetzt haben?!?

Ich würd's auf die althergebrachte Methode machen: Übergib einen Pointer auf ein struct, den die Funktion mit den passenden Werten füllt. Sollte ein Element des structs nicht speziell gesetzt werden, setzt Du dort eben einen Wert, der für "ungültig/nicht gesetzt" steht.

Und dass Du mittels "man stdarg" Infos zum Umgang mit variablen Parameterlisten erhältst, weisst Du schon?
 

thedodger



Anmeldungsdatum: 07.02.2001
Beiträge: 26

BeitragVerfasst am: 09. Mai 2001 5:12   Titel: Re: für die profis ...

> Tja, und ob da der uralte C-Compiler vom Amiga nicht ein paar spezielle Erweiterungen hatte, die sich sonst nirgends durchgesetzt haben?!?

Nein, glaub ich weniger, das die lib dort unter Oberon geschrieben wurde und die restlichen Programme teilweise unter C und oberon ...
Okay, kann doch sein ...

> Ich würd's auf die althergebrachte Methode machen: Übergib einen Pointer auf ein struct, den die Funktion mit den passenden Werten füllt. Sollte
> ein Element des structs nicht speziell gesetzt werden, setzt Du dort eben einen Wert, der für "ungültig/nicht gesetzt" steht.

werd ich letzendlcih auch nicht mehr daherum kommen ...
ich wollte mich nur möglcihst eng an die "vorgaben" halten um etwas kombatibel zu sein / bleiben.

> Und dass Du mittels "man stdarg" Infos zum Umgang mit variablen Parameterlisten erhältst, weisst Du schon?

ja

Bodo
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

thedodger



Anmeldungsdatum: 07.02.2001
Beiträge: 26

BeitragVerfasst am: 10. Mai 2001 5:04   Titel: Re: für die profis ...

die idee mit dem struct war schon nicht schlecht, doch hat sich herausgestellt, das es für die benutzer der lib zu umständlich und zu kompliziert sein wird. also hab ich das struct wieder entfernen müssen ...

jemand eine andere lösung?

B.
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Andreas Hammer
Gast





BeitragVerfasst am: 10. Mai 2001 14:13   Titel: Re: für die profis ...

Hallö !

Warum arbeitest Du nicht mit einer Checksumme ?! Das könnte dann ungefähr so aussehen:

int func(&name, &passwd, &code, .... )
{
int Check_name = 1;
int Check_pass = 2;
int Check_code = 4;
// evtl. weitere Checksummen nach dem Muster
// int Check_xxx = 2^3
// int Check_xxx = 2^4 etc. bilden

// falls nur name verändert wurde

return Check_name;

// falls nur passwd

return Check_pass;

// etc
// und für kombinationen, z. B.

return Check_name + Check_pass;

// etc.
}

So kann man am Rückgabewert Deiner Funktion eindeutig darauf schließen,
welche Deiner Werte abgefragt werden müssen/können/dürfen.

Eine weitere Möglichkeit ist natürlich, die Checksumme als Referenz der Funktion mitzugeben.

Ich hoffe ich konnte Dir weiterhelfen.

Bis die Tage,
Andreas Hammer
 

thedodger



Anmeldungsdatum: 07.02.2001
Beiträge: 26

BeitragVerfasst am: 10. Mai 2001 19:08   Titel: Re: für die profis ...

danke, aber das ist ein falscher ansatz, da name und passwd jeweils ein char (ponter ?) sein soll.
deinen ansatz nutze ich schon via bitverschiebung zum setzen von flags *g* ...

ich möchte <b>eine</b> funktion aufrufen, die mir <b>mehrere</b> pointer auf z.b. char's zurückliefert. (siehe auch dazu ursprungsfrage)
vielleicht gibt es ja auch einen anderen weg (ausser einem struct) um das zu erreichen ... nur mir fällt keiner mehr ein!

Bodo
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Andreas Hammer
Gast





BeitragVerfasst am: 11. Mai 2001 13:49   Titel: Re: für die profis ...

Hm, sorry, dann habe ich Dich wohl falsch verstanden.
Leider fällt mir zu Deinem Problem momentan keine Lösung ein.

Bis die Tage
Andreas
 

weissi



Anmeldungsdatum: 24.03.2001
Beiträge: 40
Wohnort: Freiburg

BeitragVerfasst am: 12. Mai 2001 19:12   Titel: Re: für die profis ...

Ein Array das aus char-Pointern besteht???
So ungefähr?

char *test[5];
for (i = 0; i < 5; i++) {
test = (char *)malloc(128); /* bzw. test = malloc(128); reicht für C */
/*test ob genug Speicher verfügbar war und so Scherze*/
}

return test;
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

thedodger



Anmeldungsdatum: 07.02.2001
Beiträge: 26

BeitragVerfasst am: 13. Mai 2001 11:42   Titel: Re: für die profis ...

... würde auch nicht funktionieren, da du dieses array
a) mitgeben müsstest und
b) es *vorher* in der größe definieren müsstest (da bin ich mir aber nicht sooo sicher ...)

da aber dieses aray theoretisch unendlich sein könnte (naja, das ist aber echt theoretisch ...) oder - sagen wie mal 128 einträge - beinhalten könnte, wo man *nicht* weiß, wie groß ein einzelner ist, wird das IMHO nix.

Oder liege ich da falsch?

Bodo


Zuletzt bearbeitet von thedodger am 13. Mai 2001 11:42, insgesamt 1-mal bearbeitet
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Sven
Gast





BeitragVerfasst am: 16. Mai 2001 12:44   Titel: Re: für die profis ...

kannst Du nicht einfach in der Funktionsdeklaration Pointer verwenden und dann Deinen char Pointer uebergeben...

func(char *name, char *password, int *code)

Wenn Du jetzt einen char mit
char username[128;
definierst und dann mit
func(&username, &password, &code)
uebergibst, werden die Werte innerhalb der Funktion veraendert.
Ueber einen Return Wert der Funktion koenntest Du steuern, welche(r) Werte veraendert worden ist.

Ich hoffe, ich liege mit diesem Vorschlag nicht ganz danebene...

Sven
 

Bodo
Gast





BeitragVerfasst am: 17. Mai 2001 4:29   Titel: Re: für die profis ...

nien, das sollte schon funktionieren ... allerdins war die func() nur ein beispiel ...
in real, sollte es egaö sein, wieviele werte ich der funktion übergebe.
das kann einer sein, oder 20 ... je nachdem, deswegen habe ich auch eine elipse eingesetzt und keine "festverdrahtete" Funktion.
Dein ansatz ist aber im groben durchausrichtig *g*

Bodo
 

data
Gast





BeitragVerfasst am: 18. Mai 2001 4:06   Titel: Re: für die profis ...

nimm c++ LOL...

und machs mit new...
 

thedodger



Anmeldungsdatum: 07.02.2001
Beiträge: 26

BeitragVerfasst am: 18. Mai 2001 5:37   Titel: Re: für die profis ...

witzbold ...
wenn du das ganz mal etwas verfolgt hättest ... aber für dich noch mal im klartext:

innerhalb meiner lib nutze ich durchaus c++, stelle jedoch ein reines c interface zur verfügung.

wenn du keine konkreteren hilfen hast, lass es bleiben

Bodo 'der-heut-leicht-säuerlich-aufstößt' Schulz
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

data
Gast





BeitragVerfasst am: 18. Mai 2001 13:49   Titel: Re: für die profis ...

sollte eigentlich ein witz sein..
ich bin absoluter progg newbie...
nur als einer meinte das es doch mit nem array ginge.. und
du sagtest ne geht nicht weil du vorher nicht weisst wieviel speicher das
belegt dann dachte ich.... naja new eben.. Wink

cus
data
 

data
Gast





BeitragVerfasst am: 18. Mai 2001 13:49   Titel: Re: für die profis ...

BTW:

probiers doch mal hier.. http://www.linuxforen.de/cgibin/ubb/ultimatebb.cgi
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Gehen Sie zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy