Для меня это самая раздражающая фортрановская функция, связанная с модулями. Единственное решение - добавить общий префикс к процедурам, переменным, константам и т. Д., Чтобы избежать коллизий пространства имен.
Можно поставить префикс перед всеми сущностями (все публичные сущности кажутся более подходящими) прямо внутри модуля:
module constants
implicit none
real, parameter :: constants_pi = 3.14
real, parameter :: constants_e = 2.71828183
end module constants
Недостатком является повышенная детализация кода внутри модуля. В качестве альтернативы можно использовать модуль-оболочку с префиксом пространства имен, как предлагается здесь , например.
module constants_internal
implicit none
real, parameter :: pi = 3.14
real, parameter :: e = 2.71828183
end module constants_internal
module constants
use constants_internal, only: &
constants_pi => pi, &
constants_e => e
end module constants
Последняя небольшая модификация того, что вы, Стефано, предложили.
Даже если мы примем ситуацию с многословием, тот факт, что Fortran не учитывает регистр, вынуждает нас использовать тот же разделитель (_) в именах сущностей. И будет действительно трудно отличить имя модуля (в качестве префикса) от имени объекта, пока мы не будем использовать строгую дисциплину именования, например, имена модулей - это только одно слово.