さて、私は次の機能を持っています:
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戻ります。10
の詳細について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 つの文字列が等しい場合) はfunctionX1 を返し、それ以外の場合は 0 を返します。strcmp
この構文は の結果strcmpを 0 と比較し、比較の結果を返します。
ゼロと比較することは、ブール値として整数を使用する C のように、ブール式を否定することと同じです。そう
return strcmp(array1,array2)==0;
と同じです
return !strcmp(array1,array2) ;
strcmp は、両方の文字列が等しい場合にのみゼロを返すため、文字列が等しい場合、式は true を返します。