('yes', *"no", **main, *********printf)
оценивается как *********printf
, потому что оператор запятой оценивает свои операнды и возвращает значение последнего выражения. *********printf
равно printf, поскольку разыменование указателя на функцию приводит к тому же указателю на функцию; это ничего не делает.
Затем, результат первой круглой скобки, printf, применяется к («hello world! \ N»), что приводит к выводу текста на экран. Функция printf возвращает количество написанных символов. Затем это число умножается на 0, и произведение возвращается основной функцией.
Намерения - всего лишь подсказки для компилятора, и вы можете выбросить эту информацию и нарушить ее. Намерения существуют практически полностью, чтобы убедиться, что вы делаете только то, что планировали сделать в подпрограмме. Компилятор может довериться Вам и что-то оптимизировать.
Это означает, что намерение(in)
не передается по значению. Вы все равно можете перезаписать исходное значение.
program xxxx
integer i
i = 9
call sub(i)
print*,i ! will print 7 on all compilers I checked
end
subroutine sub(i)
integer,intent(in) :: i
call sub2(i)
end
subroutine sub2(i)
implicit none
integer i
i = 7 ! This works since the "intent" information was lost.
end
program xxxx
integer i
i = 9
call sub(i)
end
subroutine sub(i)
integer,intent(out) :: i
call sub2(i)
end
subroutine sub2(i)
implicit none
integer i
print*,i ! will print 9 on all compilers I checked, even though intent was "out" above.
end
intent (in)
- выглядит как передача по значению (и изменения этого не отражаются во внешнем коде), но на самом деле передается по ссылке, и ее изменение запрещено компилятором . Но это все еще можно изменить. intent (out)
- передать каким-либо образом по ссылке, на самом деле возвращаемый аргумент intent (inout)
- передать по ссылке, нормальный параметр входа / выхода. Используйте намерение (выход)
, если оно явное, для документирования вашего дизайна. Не обращайте внимания на очень небольшой прирост производительности, если он вообще есть. (Комментарии предполагают, что их нет, поскольку намерение (в)
технически также передается по ссылке.)