ページ 11

if構文について(基本的な質問です)

Posted: 2017年2月13日(月) 23:34
by dyad
以前かなり初期段階でゲームプログラムの勉強を断念していたのですが、数年ぶりにもう一度挑戦しようかなと思って勉強し直しています。
そこで改めて新ゲームプログラミングの館をやり直している最中なのですが、超基本的な部分で少しだけ疑問に思ったところがあったので質問させてください。

1.5章にて、ProcessMessage関数他重要な関数を毎フレーム読み込ませる必要があるということまではわかったのですが、その方法として
while( 1 ){
[tab=30] ProcessMessage();
}
は納得がいくのですが、
while(1){
[tab=30]if( ProcessMessage() != 0 ){
[tab=30][tab=30]break;
[tab=30]}
}
が今ひとつ納得できません。ifの条件文に関数を入れても呼び出したことになる、ということなのでしょうか。
基本的な質問で恐縮ですが、よろしくお願いします。

Re: if構文について(基本的な質問です)

Posted: 2017年2月13日(月) 23:52
by みけCAT
dyad さんが書きました:ifの条件文に関数を入れても呼び出したことになる、ということなのでしょうか。
はい。
ifの条件文は評価されるので、関数を呼び出す式を(評価される場所に)書けば評価され、呼び出されます。
関数を入れるだけでは、呼び出されません。

コード:

if (ProcessMessage() != 0) break; // 評価され、関数が呼び出される
if (1 || ProcessMessage() != 0) break; // 短絡評価により関数呼び出しを含む部分は評価されないので、呼び出されない
if (ProcessMessage != 0) break; // 評価されるが、関数呼び出し演算子を使っていないため呼び出されない

Re: if構文について(基本的な質問です)

Posted: 2017年2月14日(火) 00:53
by dyad
関数呼び出し演算子…関数の後ろにあるカッコにはそんな意味があったんですね…そういう記述ルールだと思ってました…
ありがとうございます。お陰できちんと納得した上で学習を続けられそうです。

ついで気味な質問になるのですが、

コード:

if (ProcessMessage() || 1 != 0) break;
は評価され呼び出される、ということでいいのでしょうか。この場合後半部分にまったく意味がない気はしますが。

Re: if構文について(基本的な質問です)

Posted: 2017年2月14日(火) 01:24
by みけCAT
dyad さんが書きました:ついで気味な質問になるのですが、

コード:

if (ProcessMessage() || 1 != 0) break;
は評価され呼び出される、ということでいいのでしょうか。この場合後半部分にまったく意味がない気はしますが。
はい。
|| (論理OR) 演算子の動作は、
1. 左辺を評価する
2-1. 左辺が0でなければ、右辺を評価せず1になる
2-2. 左辺が0であれば、右辺を評価し、0以外なら1、0なら0になる
なので、左辺のProcessMessage()は評価され、関数が呼び出されます。

Re: if構文について(基本的な質問です)

Posted: 2017年2月14日(火) 07:56
by dyad
なるほど、ありがとうございました!