La fonction n'a pas de type implicites
Je suis en train d'apprendre à travailler avec des fonctions. J'ai le code suivant:
program main
implicit none
write(*,*) test(4)
end program
integer function test(n)
implicit none
integer, intent(in) :: n
integer :: i, ans
ans=1
do i=1,n
ans=ans*i
enddo
test=ans
end function test
Quand je compile (avec gfortran 4.1.2), j'obtiens l'erreur suivante:
In file test.f90:4
write(*,*) test(4)
1
Error: Function 'test' at (1) has no IMPLICIT type
OriginalL'auteur sodiumnitrate | 2013-07-19
Vous devez vous connecter pour publier un commentaire.
Déplacer la ligne
à la fin de votre fichier source, et, à sa place, écrire la ligne
Comme vous l'avez écrit votre programme, il n'a pas connaissance de la fonction
test
, qui est ce que le compilateur te dit. J'ai proposé l'une des façons dont vous pouvez fournir le programme avec les connaissances dont il a besoin, mais il en existe d'autres. Puisque vous êtes un apprenant, je vais vous laisser deviner ce qu'il se passe dans le détail.Oui, comme je l'ai écrit il y a d'autres. Vous pourriez écrire un
module
dans un autre fichier source et de ré-utiliser la fonction de cette façon. Consultez votre Fortran tutoriel.OriginalL'auteur High Performance Mark
Juste au cas où, quelqu'un a le même problème d'une autre manière (en particulier pour le cas décrit dans le commentaire) est à ajouter
après
dans le programme principal.
"mieux" ... eh bien, pour un débutant, cette solution est tout simplement plus facile et donc mieux aussi, dans un sens. Il ne nécessite pas de connaissances supplémentaires sur des concepts tels que les modules ou les contient. Bien sûr accepté la réponse est plus élégant et économisez. Donc, je suis totalement d'accord dans le sens que je préfère pour mes programmes. Mais en tant que débutant, j'ai toujours été reconnaissant pour des solutions simples, mais ils pourraient ne pas résoudre le problème de la manière la plus générale.
Je ne suis pas d'accord. Vous pour guider les débutants dans la zone où ils peuvent être piégés avec le style ancien qui a été abandonné pour de bonnes raisons, il y a 20 ans. Quand j'enseigne la programmation Fortran au sein de notre université, l'organisation du programme et des modules est l'un des premiers et des choses plus importantes. Je ne montre pas comment écrire un sous-programme avant l'introduction d'un module comme un conteneur pour les placer.
Désolé d'arriver en retard à la lutte ... l'utilisation de
external
désactive la capacité du compilateur de vérifier que les appels de procédure correspondre correctement réels et des arguments formels. Sans équivoque, et objectivement, "mieux" dans le sens de le rendre plus difficile pour un programmeur d'écrire dangereux, ou même tout simplement faux, code.... et je ne comprends pas pourquoi les gens downvote réponses correctes!
OriginalL'auteur PeMa
Il suffit de mettre ceci:
entier test
Vous devez déclarer la fonction d'une variable pour le compilateur pour connaître le type de retour de la fonction.
OriginalL'auteur renedet