スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-) | [編集]

[C/C++] if文の罠

C/C++言語のif文の仕様に関するお話です。
if.jpg


まずは、次の2つのプログラムをご覧下さい。
・プログラム1
正しいプログラム
・プログラム2
書き間違えたプログラム
そう、for文の条件部分がプログラム1では(i == 1)になっているのに対し、プログラム2では(i = 1)となっているのです。たったそれだけの差ですが、実行結果は大きく異なってしまいます。次の画像がその実行結果です。
・結果1
予想通りの結果
・結果2
予期せぬ結果
プログラム1ではif文の条件部分でiと1を比較しているのに対し、プログラム2ではiに1を代入してしまっているので結果が大きく異なってしまっているのです。
普通、if文はプログラム1のように使うのですが、プログラム2のように書き間違えても、何の警告もされずコンパイルに通ってしまいます。
すると、プログラムを書いた本人は間違えている自覚が無いので予期せぬ結果が出て困ってしまうのです。
しかし、Javaではこのようなことが無いように、if文の条件部分に結果がTrueかFalse以外の式を入れるとコンパイル時にエラーが出るようになっています。だからといってJava万歳というわけではありませんが、少しだけJavaのありがたさを感じた出来事でした。

ちなみに、C/C++でif文を書く場合、このような間違いをコンパイル時に発見できるようにif(1 == i)と書く方もいるようですが、入門書などはif(i == 1)ですので、私はあまり見慣れず違和感を抱きました。
※if(1 = i)は数値に値を代入しようとするので、コンパイル時にエラーが出る。
スポンサーサイト
未分類 | 【2006-09-30(Sat) 23:09:46】 | Trackback:(0) | Comments:(4) | [編集]
コメント
エラーでないことにびっくり。
コンパイラとかを替えてもそうなるのかな?
2006-10-01 日  01:09:47 |  URL | nakasen #- [編集]
>nakasenさん
そういう言語仕様らしいです。
開発環境はVisualC++2005だから、コンパイラは悪くないだろうし。
2006-10-01 日  07:12:22 |  URL | 防衛結界 #zh83eY9A [編集]
×fanc
○func
これは恥ずかしい(汗
2006-11-02 木  11:38:24 |  URL | 防衛結界 #zh83eY9A [編集]
このコメントは管理人のみ閲覧できます
2007-01-07 日  17:43:41 |  URL |  # [編集]
コメントの投稿


管理者にだけ表示を許可する

トラックバック

この記事にトラックバックする(FC2ブログユーザー)


Copyright © あぅえぅなブログ All Rights Reserved. Powered By FC2. 
skin:*cuteblog*   
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。