Fortran for C Programmers
a year ago
- #C/C++
- #Programming
- #Fortran
- Fortran专为C/C++程序员快速适应而设计,聚焦核心特性并规避常见陷阱。
- Fortran标准历经'66、'77、'90、'95、2003、2008及2018版本迭代,始终强调向前兼容性。
- 支持两种源码格式:固定格式(.f)和自由格式(.f90),无保留字且不区分大小写。
- 变量命名规则:I-N开头默认为INTEGER类型,其余为REAL类型(可手动修改此规则)。
- 数组必须显式声明,圆括号同时用于数组索引和函数调用。
- 内置函数无需声明即可调用,其命名遵循隐式类型规则。
- 现代Fortran采用模块化机制管理类型/数据/子程序接口,同时保留传统语法。
- 关键术语:'关联'、'派生类型'(类似C++类)、'泛型'(函数重载)。
- 内置数据类型:INTEGER/REAL/COMPLEX/LOGICAL/CHARACTER,通过'kind'参数指定非标准字节长度。
- 支持创建用户自定义类型(类似C结构体),可包含继承/析构函数/默认初始值。
- 数组支持多维存储,秩(rank)表示维度,内存按列优先排列(末维步长最大)。
- ALLOCATABLE类型支持动态内存分配,离开作用域时自动释放(类似C++的std::vector)。
- I/O操作内置于语法,支持格式/无格式读写,使用类似UNIX文件描述符的单元号。
- 子程序分为FUNCTION和SUBROUTINE,支持一级嵌套且内部过程可访问宿主变量。
- 模块机制实现分离编译和命名空间管理,通过USE语句引用模块内容。
- 参数默认引用传递,INTENT(IN)声明只读参数,VALUE关键字实现传值调用。
- 通过命名接口实现重载,允许基于参数类型使用泛型函数名。
- CLASS关键字支持运行时多态(类似C++虚函数)。
- 指针是对象而非类型,自动解引用,不可指向其他指针或分配内存的元数据。
- 预处理依赖具体实现(常用C预处理器),不同编译器支持程度不一。
- 类型绑定过程模拟C++成员函数,对象作为隐式参数传递。
- 常见陷阱:静态初始化变量、语句函数、与C语言不同的表达式求值规则。