Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Kryptischer Prozeduraufruf

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.11.2013, 13:12 Uhr
C-Laie



Hallo C-Freunde!

Zur Zeit versuche ich einen C-artigen Quelltext nachzuvollziehen. Dabei ist eine Prozedur aufzurufen (Parameter: void). Doch es scheitert an der Deklarationszeile:


Code:
void sort(void *A, size_t n, size_t size, int (*cmp)(const void *, const void *))


, und zwar am letzten Parameter, den ich überhaupt nicht aufgelöst bekomme. Was geschieht dort? Natürlich habe ich schon reichlich gesucht, aber nichts, was mir weiterhilft, gefunden.

Um festzustellen, woher das ominöse "cmp" stammt, rief ich die Prozedur allein und völlig leer auf, also


Code:
void sort(void *A, size_t n, size_t size, int (*cmp)(const void *, const void *))
{}


Der Borland-C++-Compiler compiliert das klaglos. Auch die IDE-Funktion "Deklaration suchen" brachte mich nicht weiter.

Klar, mit dem Sternchen ist es ein Zeiger, und cmp hat wahrscheinlich etwas mit compare/comparing zu tun.

Was für einen letzten Parameter muß man der sort-Prozedur übergeben?

Vielen Dank im voraus und beste Grüße

C-Laie
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.11.2013, 16:17 Uhr
Tommix



Hallo,
das ist ein Zeiger auf eine Funktion, die zwei der zu sortierenden Elemente vergleicht.
Hier ist ein kleines Beispiel:
http://stackoverflow.com/questions/1787996/c-library-function-to-do-sort

Gruß,
Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.11.2013, 15:35 Uhr
C-Laie



Vielen Dank, Tommix!

Daß und warum "cmp" eine C++-eigene Funktion zu sein scheint, habe ich im ersten Beitrage versucht darzulegen. Wundert mich nur, daß "Deklaration suchen" sie nicht finden konnte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.11.2013, 16:59 Uhr
Tommix



Hallo,
genau diese Funktion schreibt man üblicherweise selbst. Dadurch kann die Bibliotheksfunktion Arrays jeder Art sortieren.

C++:
int (*cmp)(const void *, const void *)


beschreibt nur, wie die Funktion auszusehen hat. Im praktischen Einsatz ist durchaus etwas in der Art machbar:

C++:
sort(adresse, sizeof(adresse)/sizeof(*adressse), sizeof(*adresse), vergleiche_name);
sort(adresse, sizeof(adresse)/sizeof(*adressse), sizeof(*adresse), vergleiche_plz);


Oder eine cmp - Funktion die aufwärts und eine andere die abwärts sortieren läßt. Die müssen nicht comp heißen.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.11.2013, 19:14 Uhr
C-Laie



Hallo Tommix, besten Dank, und entschuldige bitte, daß ich jetzt erst wieder hier hineingeschaut habe und jetzt antworte. Entweder gibt es in diesem Forum keine Benachrichtigungsfunktion, oder meine ist deaktiviert (muß ich mal schauen).

Ich bin jetzt auch ein wenig schlauer, verstehe jetzt halbwegs, was da aufgerufen wird. Und ich weiß ich auch, daß ich einen Sortieralgorithmus zum Laufen zu bringen versuche, der den gleichen Aufruf (bzw. die gleiche Aufrufkonvention) wie das C(++?)-eigene qusort hat. Damit werde ich mich erst einmal beschäftigen. Sollte sich dazu eigentlich einiges finden lassen.

Bis jetzt bekomme ich es compiliert, zum Laufen und die Werte an die Sortierfunktion übergeben, es scheitert beim ersten Aufruf der cmp-Funktion.

Nochmals besten Dank und Gruß

C-Laie

Dieser Post wurde am 24.11.2013 um 19:17 Uhr von C-Laie editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: