0

私は大学のコースのために C でアプリケーションを書いています。アプリケーションのセクションで、整数を繰り返し増やしています。printf ステートメントを使用すると、int1 が 20 に増加していることがわかりますが、実行は失敗します。なぜそうなのか知りたいのですが?

int main() {
    int i,int1=0, int2=0;
    for (i = 0; i<10; i++) {
        int1 = (int2 + 2);
        int2 = int1;
    }
}

プログラムは、ANSI C とインライン化する必要があります。

int1 = (int2 + 2);

コンパイラは「同じ」変数のどれが最初に処理されるかを保証できないため、未定義の動作です。(ただし、間違っている場合は訂正してください!) そのため、より長い方法を使用しましたが、アプリケーションはどちらの方法でも同じように失敗します。

これが失敗する理由は何ですか?

4

3 に答える 3

5

return 0;プログラムが正しく実行されたことを示すために、プログラムの最後に忘れただけです。

「未定義の動作」については: いいえ、それは完全に有効な C コードです。

于 2012-12-12T15:38:52.153 に答える
3

あなたのコードはうまく見えます(そして実行されます)...しかし、あなたの「失敗」コメントに関して:

In my compiler I am told that the build is successful, when the application then runs it says RUN FAILED (exit value 3, total time: 292ms

あなたのプログラムは値を返すはずです:

int main()

「私は main と呼ばれる関数です。パラメーターをとらず、int を返します」と言いますが、プログラムは何も返しません。return ステートメントを追加してみてください。

int main() {
    int i,int1=0, int2=0;
    for (i = 0; i<10; i++) {
        int1 = (int2 + 2);
        int2 = int1;
    }
    return 0; // Note: a '0' return is normally success
}
于 2012-12-12T15:45:07.827 に答える
1

あなたが持っている

int1 = (int2 + 2);

いいえ

 int1 = (int1 + 2);
于 2012-12-12T15:38:27.960 に答える