ビット単位の演算子とポインターを使用してゲームをプレイしようとしないでください。
より簡潔な式の書き方を探しているだけなら、これは非常に一般的で慣用的な方法です。
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;
うん!