Представляет ли какое-либо изменение в состоянии программы наблюдаемое поведение?

Рассмотрим две следующие программы:

программа один

int main()
{
   printf( "hello\n" );
}

программа два

int main()
{
   srand( 0 );
   if( rand() ) {
      printf( "hello\n" );
   } else {
      printf( "hello\n" );
   }
}

Имеют ли они такое же наблюдаемое поведение или нет? Согласно Стандарту C ++ (1.9 / 6) наблюдаемое поведение включает:

  • чтение и запись в изменчивые данные
  • библиотечные функции ввода-вывода

Теперь srand () и rand () , вероятно, не являются функциями ввода-вывода (хотя я понятия не имею, использует ли данная реализация какой-либо аппаратный источник шума), но они изменяют внутреннее состояние программы. Манипулируют ли они изменчивыми данными? Я не знаю. Вызовы printf () явно являются операциями ввода-вывода, и их последовательности идентичны в обеих программах.

Имеют ли две указанные выше программы одинаковое наблюдаемое поведение? Как мне узнать, имеют ли две данные программы одинаковое наблюдаемое поведение?

7
задан Deduplicator 3 July 2015 в 17:07
поделиться