2017-04-16 6 views
1

アサートは単に機能していません。メインでアサートが機能していない

int tspace::Tpiz::set_pitPoz(int p) 
{ 
    assert (0<=p<=11); 
    pitPoz = p; 
} 

Tpiz piz; 
piz.set_pitPoz(78); 
cout << piz.get_pitPoz(); 

出力は次のようになります。

 
78 
- - - - - - - - - - - - - - 
Process exited after 0.03378 seconds with return value 0 
Press any key to continue 

は私が行う必要がある何か他のものはありますか?

+5

「0 <= p <= 11」は、あなたが何を意味すると思うかを意味するものではありません。 – user2357112

+0

ああ。私のコードはどういう意味ですか? – jana

+0

式が正しく評価されていることを確認したい場合は、テスト形式で簡単に式を開始してください。 '(0 <= p)と(p <= 11)'を式として使用します。他の人やコンパイラーに混乱はありません。あなたはそれが価値があると思うなら、いつでも後で最適化することができますか? –

答えて

3

boolが得られるが、それは整数である11との比較、このboolが関与しようとし、それが促進intbool、(0または1)及び0<=p<=11おそらく0<=pを評価する式、この0または1が11以下であるかどうかを確認します。したがって、常に成功します。

多くの警告を有効にすることで、その種の偶然の事故を避けることができるかもしれません。そうすれば、コンパイラーは間違っている可能性が最も高いと警告します。試してみてください-Wall、またはすべての警告を有効にするには、コンパイラに指示します。多くの、できればほとんどの警告が有効になっていなければ、ソフトウェアを作成しようとすることはできません。

+0

ありがとうございます、私はすべての警告を有効にすることを検討します。 – jana

+0

愚か?名前を呼び出す必要はありません。実際、x <= y <= zがコンパイルされているにもかかわらず、完全に直感的ではないことが、これが「愚かな事故」ではなく「微妙なバグ」であることを示しています。 – SCFrench

+0

@SCFrench私は、OPではなく、偶然の事故に電話しました。 –

関連する問題