2017-03-20 3 views
0
#include <stdio.h> 


int fonction_test(void){ 
    static char index = 50; 
    for(; index<=0xff;index++){ 
     printf("Valeur: %02x\r\n", index); 
    } 
    return (int(index)); 
} 

int main(){ 
    // your code goes here 
    fonction_test(); 
    return 0; 
} 

私は正直なところCには馴染みがありませんが、なぜこの繰り返しが155回あるのか理解したいと思います。この関数が実行時エラーを引き起こすのはなぜですか

+1

1にラインreturn (int(index));を変更する必要がある)。これはC. 2ではない)オーバーフローに関係なく、それは 'signed'であるかどうかのchar''で発生しますまたは「符号なし」。 – BLUEPIXY

+0

'index'は' 0xff'よりどのくらい大きくなると思いますか? – Lundin

+0

この行は 'for(; index <= 0xff; index ++){'は常にtrueです。コンパイラは警告メッセージ(無視されていると思われる)を出力します警告:データ型の制限された範囲[-wtype-limits]のため比較が常に真です " – user3629249

答えて

2

'index'はcharです。 Cの文字ごとに、符号付きまたは符号なしが可能です。これはの実装定義です。したがって、コンパイラ/プロセッサによって異なるでしょう。

charの最大値は255(0xFF)です。 1を追加すると、システムでcharが署名済みか署名なしかによって値が異なります。符号なしの場合は、0にループします。署名されている場合、は未定義ですが、ほとんどのコンパイラはまだ-128にラップアラウンドします。いずれの場合も、forループ条件は決して偽ではありません。

あなたには無限ループがあります。そして、それが断層の原因です。

また、あなたが持っているコードはコンパイルされません、あなたはreturn ((int)(index));

関連する問題