win32apiにおけるelse ifの限界個数について

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

win32apiにおけるelse ifの限界個数について

#1

投稿記事 by 学生の嘆き » 14年前

条件分岐をするためによくelse ifを使うと思うのですが、win32api
において30個くらい繋げたところある程度の個数以下はまったく
反応しなくなりました。もしかしたら私のプログラムにバグがあるのかも
しれませんが、限界個数とかはありますでしょうか。

今は1秒ごとに条件分岐したいためWM_TIMERのなかにたくさんのelse ifを入れています。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: win32apiにおけるelse ifの限界個数について

#2

投稿記事 by beatle » 14年前

if文はC言語自体の機能ですから,Win32APIとは関係ないように思えます.
学生の嘆きさんがお使いのコンパイラは何でしょうか.Visual C++ですか?

ANSI Cの規格としては,if elseの入れ子の数は最低15まで保証されています.Visual C++がどこまで保証しているかは知りませんが,もしかしたらその制限に引っかかっているのかもしれませんね.
もしソースを貼っていただければ,何かアドバイスできるかもしれません.

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: win32apiにおけるelse ifの限界個数について

#3

投稿記事 by beatle » 14年前

コード:

#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までちゃんと表示できました.
ご報告まで.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: win32apiにおけるelse ifの限界個数について

#4

投稿記事 by softya(ソフト屋) » 14年前

普通はswitch~caseを使うか配列参照で機能を切り替えます。
ただ、switch~caseにしろelse ifにしろ条件分岐が沢山必要なアルゴリズム自体を見なおしたほうが良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: win32apiにおけるelse ifの限界個数について

#5

投稿記事 by softya(ソフト屋) » 14年前

それと質問を配置しないようにお願いします。解決したら解決チェックを!
[補足] 解決していないなら更に質問をしましょう。そのための掲示板です。

「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
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

学生の嘆き

Re: win32apiにおけるelse ifの限界個数について

#6

投稿記事 by 学生の嘆き » 14年前

実験までしていただき皆さんありがとうございます。

閉鎖

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