Quoted from PaulLaidler
Regarding afivo-pic, please provide a short working program that illustrates the what is missing from FTN95.
Paul,
OK, here is an example of module m_af_types which has no other modules to USE but it has #include 'cpp_macros.h'. I further simplified both by shortening of them and removing mentioning GFortran there
m_af_types.f90:
#include 'cpp_macros.h'
module m_af_types
use iso_c_binding, only: c_ptr
implicit none
public
integer, parameter :: dp = kind(0.0d0)
end module m_af_types
cpp_macros.h:
!#ifdef __GFORTRAN__
!#define PASTE(a) a
!#define CONCAT(a,b) PASTE(a)b
!#else
#define PASTE(a) a ## b
#define CONCAT(a,b) PASTE(a,b)
!#endif
#if NDIM == 1
#define DTIMES(TXT) TXT
#define DINDEX(TXT) TXT(1)
#define DSLICE(lo,hi) lo(1):hi(1)
#define KJI_DO(lo,hi) i = lo, hi
#define CLOSE_DO
#define IJK i
#define IJK_(s) CONCAT(i_,s)
#define DIMNAME '1d'
#elif NDIM == 2
#define DTIMES(TXT) TXT, TXT
#define DINDEX(TXT) TXT(1), TXT(2)
#define DSLICE(lo,hi) lo(1):hi(1), lo(2):hi(2)
#define KJI_DO(lo,hi) j = lo, hi; do i = lo, hi
#define CLOSE_DO end do
#define IJK i, j
#define IJK_(s) CONCAT(i_,s), CONCAT(j_,s)
#define DIMNAME '2d'
#elif NDIM == 3
#define DTIMES(TXT) TXT, TXT, TXT
#define DINDEX(TXT) TXT(1), TXT(2), TXT(3)
#define DSLICE(lo,hi) lo(1):hi(1), lo(2):hi(2), lo(3):hi(3)
#define KJI_DO(lo,hi) k = lo, hi; do j = lo, hi; do i = lo, hi
#define CLOSE_DO end do; end do
#define IJK i, j, k
#define IJK_(s) CONCAT(i_,s), CONCAT(j_,s), CONCAT(k_,s)
#define DIMNAME '3d'
#endif
The compilation (i gather result of compilation in the file Z ):
FTN95 m_af_types.f90 /CFPP NDIM 2 >Z
The file Z:
*** More than one source file specified with names m_af_types.f90 and NDIM
1 ERROR [m_af_types.f90] - Compilation failed.
Additionally this piece also looks very unusual
#define PASTE(a) a ## b