在C++ 03中,标准可观察行为(1.9/6)包括对库I/O函数的调用.现在我有这个代码:
printf( "" );
Run Code Online (Sandbox Code Playgroud)
这正式调用了库I/O函数,但没有任何效果.
这是可观察的行为吗?是否允许编译器消除它?
考虑以下两个程序:
int main()
{
printf( "hello\n" );
}
Run Code Online (Sandbox Code Playgroud)
int main()
{
srand( 0 );
if( rand() ) {
printf( "hello\n" );
} else {
printf( "hello\n" );
}
}
Run Code Online (Sandbox Code Playgroud)
他们是否有相同的可观察行为?根据C++标准(1.9/6),可观察的行为包括:
volatile数据现在,srand()和rand()有可能不是I/O功能(虽然我不知道一个给定的实现是否会使用一些硬件噪声源),但他们修改程序的内部状态.他们操纵volatile数据吗?我不知道.调用printf()显然I/O操作及其序列在两个程序中都是相同的.
上述两个程序是否具有相同的可观察行为?我怎么知道两个给定的程序是否具有相同的可观察行为?