015
19.04.2005, 09:54 Uhr
ao
(Operator)
|
Zitat von ~Pler(2): |
@ao: int strcmp( const char* kett , const1 char* kett2 );
vergleicht die beiden Strings kett1 und kett2 byteweise und liefert einen positiven Wert ( wenn kett1 > kett 2 ) und einen negativen Wert ( wenn kett1 < kett2 ) oder 0 ( wenn kett1 und kett2 völlig gleich sind ). Der Rückgabewert ist die Differenz der beiden ersten nicht übereinstimmenden Zeichen in kett1 und kett2.
|
Ich hab keinen Standard zur Hand, aber alle Beschreibungen, die ich finde (K&R, manpages, Microsoft-MSDN, etliche Suchtreffer im WWW), decken sich mit dem, was ich oben geschrieben habe und damit auch mit dem ersten Satz deiner Definition.
Dein zweiter Satz geht viel weiter und legt genau fest, wie der Rückgabewert zu berechnen ist. Leider ist das abhängig von der verwendeten Codetabelle, und die ist systemabhängig. Darum ist der genaue Wert nicht aussagekräftig, sondern wiederum nur das Vorzeichen.
Wo stammt denn diese Definition her?
Zitat: |
von Abweichungen in den verschiedenen Lib. habe ich noch nie was gehoert; und weis auch nicht wieso das gut sein soll ?? Was hat das noch mit Standard zu tun?
|
Der Standard legt das Minimum dessen fest, was eine konforme Bibliothek leisten muss. Eine konkrete Implementierung kann innerhalb dieser Grenzen tun, was sie will. Und bei strcmp ist eben nur das Vorzeichen des Rückgabewerts vorgeschrieben.
Der Vorteil liegt im Optimierungs-Potenzial. Diese Standard-Bibliotheken werden für jede Implementierung hoch optimiert und speziell auf die Möglichkeiten des Zielsystems zugeschnitten. Und je nachdem, welche Vergleichsbefehle die CPU hat, kann es auf einem System besser sein, die arithmetische Differenz zweier Zeichen zu berechnen und direkt zurückzuliefern, und auf einem anderen System besser, das Vergleichsergebnis aus irgendwelchen Flaggenregistern abzuleiten, was dann eher zu immer denselben positiven und negativen Rückgabewerten führen wird.
Es ist darum durchaus sinnvoll, solche Detail-Entscheidungen dem Library-Designer zu überlassen und nicht bis ins Letzte im Standard festzuschreiben.
Zitat: |
Wenn ich mich auf sowas nicht verlassen kann, kann ich ja nie in Quellcode sowas einbauen, der später wo anders übersetzt wird. Oder man muesste wenigstens wissen, dass es da Abweichungen gibt.
|
Du kannst dich auf das verlassen, was der Standard garantiert. Auf alles, was darüber hinausgeht, solltest du dich nicht zu fest verlassen.
ao |