У вас есть ошибка в строке full_name (first, last) - хотя это дает мне синтаксическую ошибку, возможно, просто компиляторы разные.
Используемая вами функция возвращает значение, поэтому вы можете использовать его непосредственно в операторе печати.Нет необходимости использовать его до этого, и даже если он использовался до этого, вам все равно нужно присвоить его значение (возвращаемое) чему-то вроде
string = full_name (first,последний)
В любом случае, я немного сократил его, так что вот так.
program name_test
implicit none
character(len=12) :: first, last
character(len=30), external :: full_name
write(*,'("Please enter your first name : ",\)'); read(*,*)first
write(*,'("Please enter your last name : ",\)'); read(*,*)last
write(*,'("Welcome ",A)')full_name(first,last)
end program name_test
function full_name(first,last)
implicit none
character(len=*) :: first, last
character(len=30) :: full_name
full_name = trim(adjustl(first))//" "//trim(adjustl(last))
end function full_name