ページ 1 / 1
win32apiにおけるelse ifの限界個数について
Posted: 2012年1月26日(木) 13:31
by 学生の嘆き
条件分岐をするためによくelse ifを使うと思うのですが、win32api
において30個くらい繋げたところある程度の個数以下はまったく
反応しなくなりました。もしかしたら私のプログラムにバグがあるのかも
しれませんが、限界個数とかはありますでしょうか。
今は1秒ごとに条件分岐したいためWM_TIMERのなかにたくさんのelse ifを入れています。
Re: win32apiにおけるelse ifの限界個数について
Posted: 2012年1月26日(木) 13:56
by beatle
if文はC言語自体の機能ですから,Win32APIとは関係ないように思えます.
学生の嘆きさんがお使いのコンパイラは何でしょうか.Visual C++ですか?
ANSI Cの規格としては,if elseの入れ子の数は最低15まで保証されています.Visual C++がどこまで保証しているかは知りませんが,もしかしたらその制限に引っかかっているのかもしれませんね.
もしソースを貼っていただければ,何かアドバイスできるかもしれません.
Re: win32apiにおけるelse ifの限界個数について
Posted: 2012年1月26日(木) 14:39
by beatle
コード:
#include<stdio.h>
int main (void)
{
int i;
for (i = 0; i < 50; ++i)
{
if (i == 0) { printf("%d\n", i); }
else if (i == 1) { printf("%d\n", i); }
else if (i == 2) { printf("%d\n", i); }
else if (i == 3) { printf("%d\n", i); }
else if (i == 4) { printf("%d\n", i); }
else if (i == 5) { printf("%d\n", i); }
else if (i == 6) { printf("%d\n", i); }
else if (i == 7) { printf("%d\n", i); }
else if (i == 8) { printf("%d\n", i); }
else if (i == 9) { printf("%d\n", i); }
else if (i == 10) { printf("%d\n", i); }
else if (i == 11) { printf("%d\n", i); }
else if (i == 12) { printf("%d\n", i); }
else if (i == 13) { printf("%d\n", i); }
else if (i == 14) { printf("%d\n", i); }
else if (i == 15) { printf("%d\n", i); }
else if (i == 16) { printf("%d\n", i); }
else if (i == 17) { printf("%d\n", i); }
else if (i == 18) { printf("%d\n", i); }
else if (i == 19) { printf("%d\n", i); }
else if (i == 20) { printf("%d\n", i); }
else if (i == 21) { printf("%d\n", i); }
else if (i == 22) { printf("%d\n", i); }
else if (i == 23) { printf("%d\n", i); }
else if (i == 24) { printf("%d\n", i); }
else if (i == 25) { printf("%d\n", i); }
else if (i == 26) { printf("%d\n", i); }
else if (i == 27) { printf("%d\n", i); }
else if (i == 28) { printf("%d\n", i); }
else if (i == 29) { printf("%d\n", i); }
else if (i == 30) { printf("%d\n", i); }
else if (i == 31) { printf("%d\n", i); }
else if (i == 32) { printf("%d\n", i); }
else if (i == 33) { printf("%d\n", i); }
else if (i == 34) { printf("%d\n", i); }
else if (i == 35) { printf("%d\n", i); }
else if (i == 36) { printf("%d\n", i); }
else if (i == 37) { printf("%d\n", i); }
else if (i == 38) { printf("%d\n", i); }
else if (i == 39) { printf("%d\n", i); }
else if (i == 40) { printf("%d\n", i); }
else if (i == 41) { printf("%d\n", i); }
else if (i == 42) { printf("%d\n", i); }
else if (i == 43) { printf("%d\n", i); }
else if (i == 44) { printf("%d\n", i); }
else if (i == 45) { printf("%d\n", i); }
else if (i == 46) { printf("%d\n", i); }
else if (i == 47) { printf("%d\n", i); }
else if (i == 48) { printf("%d\n", i); }
else if (i == 49) { printf("%d\n", i); }
}
return 0;
}
とりあえずこんなコードをVisual C++ 2010 Express Editionでコンパイル・実行してみましたが,49までちゃんと表示できました.
ご報告まで.
Re: win32apiにおけるelse ifの限界個数について
Posted: 2012年1月26日(木) 14:52
by softya(ソフト屋)
普通はswitch~caseを使うか配列参照で機能を切り替えます。
ただ、switch~caseにしろelse ifにしろ条件分岐が沢山必要なアルゴリズム自体を見なおしたほうが良いと思います。
Re: win32apiにおけるelse ifの限界個数について
Posted: 2012年1月26日(木) 14:55
by softya(ソフト屋)
それと質問を配置しないようにお願いします。解決したら解決チェックを!
[補足] 解決していないなら更に質問をしましょう。そのための掲示板です。
「win32apiにおけるテキストへのデータ転送とエクセル • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=10084
「win32apiにおけるY軸の逆転方法について • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=10076
Re: win32apiにおけるelse ifの限界個数について
Posted: 2012年1月27日(金) 18:39
by 学生の嘆き
実験までしていただき皆さんありがとうございます。