1、classic flang中sub_types[0]的含义要结合date type 本身一起决定的(flang1是这样设计的,用链表的形式,能串其来很多东西,比如一个数组,里面还有元素,那么就可以用sub来指向)
比如:[100*[10 Xi8]] * 的sub_types[0]就是[100*[10 Xi8]]
2、参考F08: Polymorphic assignment segfaults with empty abstract base type · Issue #851 · flang-compiler/flang · GitHub,等效含义 Change obj = Derived() to allocate(obj, source=Derived())
3、fortran的预处理有C语言风格#ifdef 和 Fortran 独有的风格!DEC$ define 两种方法,但需要注意的是,文件后缀名需要使用大写字母.F90,小写的比如.f90忽略预处理
ifort中使用!DEC$ NOINLINE,gfortran中使用!dir$ noinline
参考初识 Fortran 预处理 - Fortran教程 - Fortran Coder 程序员聚集地
技巧:f和f90不同,f是fix_form结构,是77标准写起来比较复杂,f90是free_form结构,兼容前面的。尽量用f90或者F90, 详见The layout of a program
4、毕昇编译器Fortran引导语支持,参考毕昇编译器Fortran引导语支持_鲲鹏开发套件_用户指南(毕昇编译器)_华为云
5、使用 !dir$ novector禁止向量化
6、fortran中的equivalence相当于指针别名,equivalence (L3, L(1))的意思是L3和L(1)指向同一块内存