次の 2 つのプログラムを検討してください。
プログラム 1
int main()
{
printf( "hello\n" );
}
プログラム 2
int main()
{
srand( 0 );
if( rand() ) {
printf( "hello\n" );
} else {
printf( "hello\n" );
}
}
彼らは同じ観察可能な行動を持っていますか?C++ 標準 (1.9/6) によると、観察可能な動作には以下が含まれます。
volatile
データの読み取りと書き込み- ライブラリ I/O 関数
srand()
とrand()
はおそらく I/O 関数ではありませんが (特定の実装が何らかのハードウェア ノイズ ソースを使用しているかどうかはわかりませんが)、プログラムの内部状態を変更します。彼らはデータを操作しvolatile
ますか? 知らない。への呼び出しprintf()
は明らかに I/O 操作であり、そのシーケンスは両方のプログラムで同じです。
上記の 2 つのプログラムの動作は同じですか? 特定の 2 つのプログラムが同じ観察可能な動作をしているかどうかを知るにはどうすればよいですか?