考虑以下两个程序:
节目一
int main()
{
printf( "hello\n" );
}
方案二
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 操作,其顺序在两个程序中是相同的。
上面的两个程序是否具有相同的可观察行为?我如何知道两个给定程序是否具有相同的可观察行为?