ビット単位の演算子とポインターを使用してゲームをプレイしようとしないでください。
より簡潔な式の書き方を探しているだけなら、これは非常に一般的で慣用的な方法です。
FILE* from = fopen("in.txt", "r");
FILE* to = fopen("out.txt", "w");
if (!from || !to) // note the use of the ! operator
{
printf("failed to open files!\n");
return;
}
...
} /* end of function */
!演算子は論理 NOT 演算子です。ヌル ポインターの値は常に 0 であり、これは "false" 値であるため、この式!fromは "がヌル ポインターの場合は true from、それ以外の場合は false` を意味します。"if not from, or not to, thenエラーを処理する」
同様に、if (from)ポインターが NULL でないかどうかをチェックするようなコードを書く人もいます。
PS ポインターを宣言するときのような式を使用するのが好きな人が多いことは知っていFILE*ますが、この形式は嘘なので嫌いです。これを宣言FILE *fromすると、「式*fromには型があります」という意味になりますFILE。*の後に右を置くと機能しFILEますが、これは「式のfrom型がポインタへの型を持つ」ことを意味するように見えますFILE。そうではありません。例を次に示します。
FILE* from, to;
fromタイプは「pointer-to- FILE」です。は何型toですか?なぜそれは普通の古いものFILEであり、どんな種類のポインターでもありません。これらを 1 行で宣言する場合、使用する必要がある式は次のとおりです。
FILE *from, *to;
これは、「式*fromは typeFILEであり、式*toはtype である」ことを意味しFILEます。慣れるとこんな感じです。
あなたはこれを書くことができますが、それは厄介です。
FILE* from, *to;
うん!