質問

この質問があります。以前から考えていましたが、答えるのは簡単ではないと思いました

int x = x + 1;
int main() {
  return x;
}

私の質問は、プログラムの動作がそもそも有効である場合、その動作が定義されているか未定義であるかということです。定義されている場合は、次の値になります。 x で知られている main?

役に立ちましたか?

解決

それは定義されていることを確信しています、そしてxの値が1であるべきです1。行われます。 "

その後、それはすべてかなり簡単なことだと思います。

他のヒント

私の質問は、プログラムの動作がそもそも有効である場合、その動作が定義されているか未定義であるかということです。定義されている場合、x の値は main で既知ですか?

このコードは決してクリーンではありませんが、私にとっては予想通りに動作するはずです。

int x プログラムの開始時にゼロとして定義されているデータ セグメントに変数を入れます。前に main(), 、静的初期化子が呼び出されます。のために x それがコードです x = x + 1. x = 0 + 1 = 1. 。したがって、main() は 1 を返します。

次の場合、コードは間違いなく予測不可能な方法で動作するでしょう。 x はローカル変数であり、スタック上に割り当てられます。データセグメントとは異なり、スタックの状態には未定義のガベージが含まれることがほぼ保証されています。

.BSSに格納されている 'x'変数は、プログラムをロードしたときに0が埋められます。その結果、プログラムがメモリにロードされたときに 'X'の値は0です。

MAINを呼び出す前に、 "x= x + 1"が実行されます。

有効かどうかわからないが、動作は未定義ではない。

メインコールxを0に初期化する必要があるため、値はメインと入力する1つである必要があります。それは1を返します。それは定義された動作です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top