2013-07-29 1 views
3

рассмотреть этот Фортран:Почему код, похоже, не выполнялся, когда нет выходных данных?

program main 
implicit none 

double complex :: a(51,51),b(51,51) 
Integer::i,j 
real(8)::ht=0.01 
real(8) T1,T2 

do i=1,51 
    do j=1,51 
     a(i,j)=cmplx(Sin(0.01*i),Cos(0.01*j)) 
    end do 
end do 

call cpu_time(T1) 

do i=1,23497 
    b(:,:)=(0.,1.)*ht/2.*a(:,:) 
end do 

call cpu_time(T2) 

write(*,*) sum(b) 
print '("Time = ",f12.9," seconds.")', T2-T1 

end program main 

выход является

(-12.4321907340245,3.30723047182099) 
Time = 0.052991000 seconds. 

Если закомментировать write(*,*) sum(b), выход

Time = 0.000000000 seconds. 

, кажется, цикл не выполняются, поэтому Бывает?

ответ

8

Когда вы удаляете инструкцию write, компилятор может видеть, что переменная b никогда не используется, поэтому она удаляет код, который назначает b.

Как только он это сделал, он может сказать, что переменная a никогда не используется, поэтому она удаляет код, который присваивает эту переменную.

Тогда ничего не остается, кроме звонков cpu_time().

Смежные вопросы