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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dyad

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

#1

投稿記事 by dyad » 8年前

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

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 8年前

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

コード:

if (ProcessMessage() != 0) break; // 評価され、関数が呼び出される
if (1 || ProcessMessage() != 0) break; // 短絡評価により関数呼び出しを含む部分は評価されないので、呼び出されない
if (ProcessMessage != 0) break; // 評価されるが、関数呼び出し演算子を使っていないため呼び出されない
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

dyad

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

#3

投稿記事 by dyad » 8年前

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

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

コード:

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 8年前

dyad さんが書きました:ついで気味な質問になるのですが、

コード:

if (ProcessMessage() || 1 != 0) break;
は評価され呼び出される、ということでいいのでしょうか。この場合後半部分にまったく意味がない気はしますが。
はい。
|| (論理OR) 演算子の動作は、
1. 左辺を評価する
2-1. 左辺が0でなければ、右辺を評価せず1になる
2-2. 左辺が0であれば、右辺を評価し、0以外なら1、0なら0になる
なので、左辺のProcessMessage()は評価され、関数が呼び出されます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

dyad

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

#5

投稿記事 by dyad » 8年前

なるほど、ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る