S-H-GAMELINKS / Novel.Game.Engine.LINKS

ノベルゲームエンジン「LINKS」
Other
13 stars 1 forks source link

fix: fix assert usage #14

Closed yumetodo closed 7 years ago

yumetodo commented 7 years ago

assert macroのexpressionは副作用を持ってはいけない。

cause:

ref:

S-H-GAMELINKS commented 7 years ago

Pull Request チェックさせていただきました。 マージさせていただきますね。

ちなみに、これは assert に、TRUE、FALSE、0以外の引数が渡されていたのを修正されたということでよいのでしょうか?

yumetodo commented 7 years ago

@S-H-GAMELINKS いえ、違います。

  1. DEBUGマクロ定義時は単純にexpressionを評価(Releaseビルドでloadメンバ関数が呼ばれなかったのを治す)、未定義時はassertマクロのエイリアスとなるマクロ関数LINKS_EXPECT_TRUEを追加
  2. assertはfalseにexpressionが評価された時メッセージを出すようになっているが、逆にしていた部分を修正

となります。というより参考リンクに張ったmanの

If expression is false (i.e., compares equal to zero)

but in C99 it may have any scalar type.

より、assertマクロの判定は、(0 == (expression))の時メッセージを出すものと読めます。

S-H-GAMELINKS commented 7 years ago

なるほど。そういう事でしたか。

いやぁ、ありがとうございます

yumetodo commented 7 years ago

assertマクロのexpressionはNDEBUGマクロ定義時は評価されない(=実行されない)ので、評価されることで副作用を持つ(ex. 何かしらの変数の変更を伴う場合)式は書いてはいけないんですね。

他に似たような怖い話としては

なんかが有ります。

S-H-GAMELINKS commented 7 years ago

ほうほう。

早速、読んでみますね