Je ne comprends pas le comportement de la fonction intrinsèque present() avec pgf90 7.2. J'ai écrit un programme d'exemple de 20 lignes pour tester cela, mais les résultats ne sont toujours pas clairs pour moi. Observez :
subroutine testopt(one,two,three,four,five)
implicit none
integer, intent(in) :: one,two
integer, intent(out) :: three
integer, intent(in), optional :: four
integer, intent(out), optional :: five
three = one + two
print *,"vérification de la présence : ", present(four), present(five)
if (present(four) .and. present(five)) then
five = four*four
end if
end subroutine testopt
Si j'appelle testopt(1,2,(n'importe quelle variable)) depuis mon programme principal, cela imprime : "vérification de la présence : T F". Cependant, si j'appelle testopt(1,2,(n'importe quelle variable)) depuis un sous-programme, cela imprime : "vérification de la présence : T T". Je m'attendais à voir "vérification de la présence : F F" dans les deux cas, car je n'appelle le sous-programme qu'avec les 3 arguments obligatoires et aucun des optionnels. Je ne comprends pas pourquoi cela se comporte ainsi, et cela cause un bogue majeur dans un programme sur lequel je travaille. Je suis reconnaissant pour toute lumière apportée. Merci.