マニュアルページから:
strcmp()およびstrncmp()関数は、s1(またはその最初のnバイト)がそれぞれs2より小さい、一致する、または大きいことがわかった場合、ゼロより小さい、等しい、またはより大きい整数を返します。 。
Cのサンプルコード(-15
私のマシンで印刷し、test1とtest2を交換すると値が反転します):
#include <stdio.h>
#include <string.h>
int main() {
char* test1 = "hello";
char* test2 = "world";
printf("%d\n", strcmp(test1, test2));
}
strcmpの値が-1、0、1以外のものであることに依存するこのコード(この質問から取得)を見つけました(の戻り値を使用しますqsort
)。私にとって、これはひどいスタイルであり、文書化されていない機能に依存します。
私は2つの関連する質問があると思います:
- C標準には、ゼロ未満、ゼロより大きい、またはゼロに等しい以外の戻り値を定義するものがありますか?そうでない場合、標準の実装は何をしますか?
- 戻り値はLinux、Windows、およびBSD間で一貫していますか?
編集:
コンピューターを5分間放置した後、問題のコードに実際にはエラーがないことに気付きました。コメント/回答を読む前に理解した部分を削除しましたが、コメントを適切に保つためにそこに残しました。これはまだ興味深い質問であり、常に-1、0、または1を返す他の言語に慣れているプログラマーに問題を引き起こす可能性があると思います(たとえば、Pythonはこれを行うようですが、そのように文書化されていません)。
FWIW、文書化された動作以外のものに依存するのは悪いスタイルだと思います。