さて、私は次の機能を持っています:
int functionX()
{
return strcmp(array1,array2)==0;
}
なぜ誰かがこれをするのでしょうか?== 0は、この関数が常にFALSEを返すことを示します。これは本当ですか、それともエキゾチックなC構文の入門書がありませんか?
(strcmp(array1, array2) == 0)
を評価する式でstrcmp()
、負、正、またはゼロの数値を返すことができます。2 つの文字列が同じ場合、 をstrcmp()
返します0
。
== 0
の戻り値を と比較していstrcmp()
ます0
。functionX()
これは、2 つの文字列が同じ場合に「真」(ゼロ以外) の値を返す必要がある場合に使用します。具体的には、その場合、またはそれ以外の場合にstrcmp(array1,array2)==0
戻ります。1
0
の詳細についてstrcmp()
は、man ページを参照してください。
strcmp()
2 つの引数が等しい場合は 0 を返します。あなたの例では、 functionX()
「真」の iff を返し、等しいarray1
とarray2
比較します。
strcmp()
2 つの文字列が等しい場合は 0、それ以外の場合は 0 以外の整数を返します。
この関数は、結果が 0 の場合は 1 を返し、結果が 0 でない場合は 0 を返すという意味で、結果を単に「反転」します。C では、真のブール型がないため (C99 を除く)、0 以外はすべて「真」と見なされます。
ここには特別なことは何もありません... のstrcmp(array1, array2)==0
結果strcmp
を 0 と比較し、等しい場合は 1 を返し、異なる場合は 0 を返します。
全体として、結果が 0 の場合 (つまり、比較された 2 つの文字列が等しい場合) はfunctionX
1 を返し、それ以外の場合は 0 を返します。strcmp
この構文は の結果strcmp
を 0 と比較し、比較の結果を返します。
ゼロと比較することは、ブール値として整数を使用する C のように、ブール式を否定することと同じです。そう
return strcmp(array1,array2)==0;
と同じです
return !strcmp(array1,array2) ;
strcmp は、両方の文字列が等しい場合にのみゼロを返すため、文字列が等しい場合、式は true を返します。