我有一个简单的FORTRAN代码
#define DTYPE(a) a/**/_s
TYPE,EXTENDS(DTYPE(type1)) :: DTYPE(type2)
CLASS(DTYPE(type1)_), POINTER :: x => NULL()
CONTAINS
PROCEDURE :: comp => DTYPE(comp1)
END TYPE DTYPE(type2)
#undef DTYPE
使用GNU预处理器我会得到我期望的正确行为,而使用CLANG预处理器时它会表现得很奇怪。
使用cpp-4.9(GNU)
cpp-4.9 -traditional-cpp -P test.f
TYPE,EXTENDS(type1_s) :: type2_s
CLASS(type1_s_), POINTER :: x => NULL()
CONTAINS
PROCEDURE :: comp => comp1_s
END TYPE type2_s
使用cpp(CLANG)
cpp -traditional-cpp -P test.f
TYPE,EXTENDS(type1 _s) :: type2 _s
CLASS(type1 _s _), POINTER :: x => NULL()
CONTAINS
PROCEDURE :: comp => comp1 _s
END TYPE type2 _s
使用cpp(CLANG)有一个额外的空间会导致编译器错误。有谁知道这是什么问题?