I use the Intel Visual Fortran. According to Chapmann\'s book, declaration of function type in the routine that calls it, is NECESSARY. But look at this piece of code,
You must be working with a very old copy of Chapman's book, or possibly misinterpreting what it says. Certainly a calling routine must know the type of a called function, and in Fortran-before-90 it was the programmer's responsibility to ensure that the calling function had that information.
However, since the 90 standard and the introduction of module
s there are other, and better, ways to provide information about the called function to the calling routine. One of those ways is to put the called functions into a module and to use
-associate the module. When your program follows this approach the compiler takes care of matters. This is precisely what your code has done and it is not only correct, it is a good approach, in line with modern Fortran practice.
association is Fortran-standard-speak for the way(s) in which names (such as fcn
) become associated with entities, such as the function called fcn
. use-association is the way implemented by writing use module
in a program unit, thereby making all the names in module
available to the unit which uses module
. A simple use statement makes all the entities in the module known under their module-defined names. The use
statement can be modified by an only
clause, which means that only some module entities are made available. Individual module entities can be renamed in a use
statement, thereby associating a different name with the module entity.
The error message you get if you include a (re-)declaration of the called function's type in the calling routine arises because the compiler will only permit one declaration of the called function's type.