The C preprocessor macro for concatenation (##
) does not seem to work on a Mac using gfortran. Using other Fortran compilers on other systems works so I am looking for a workaround for gfortran. I have to use the ##
to create many variables so I can't do without them.
Example code:
#define CONCAT(x,y) x##y
program main
integer, parameter:: CONCAT(ID,2) = 3
print*,"Hello", ID_2
end program main
Compilation error with gfortran on MAC
gfortran m.F90 -o m
m.F90:5.23:
integer, parameter:: ID##2 = 3
1
Error: PARAMETER at (1) is missing an initializer
##
doesn't work in gfortran (any OS, not just Mac) because it runs CPP in the traditional mode.According to this thread the gfortran mailing list the correct operator in the traditional mode is
x/**/y
, so you must distinguish between different compilers:Others (http://c-faq.com/cpp/oldpaste.html) use this form, which behaves better when a macro passed to the CONCAT (via Concatenating an expanded macro and a word using the Fortran preprocessor):
The indirect formulation helps to expand the passed macro before the strings are concatenated (it is too late after).