Fortran编译初步

Fortran 编程中相关文件后缀

.a静态库 (archive).f, .for, .FOR

.ftn*, .f90*, .f95*, .f03*">Fortran源代码(不需编译
预处理).F, .fpp, .FPP

.FTN*, .F90*, .F95*, .F03*Fortran源代码(需要编译预处理).rFortran源代码(需要RatFor编译预处理).o对象文件.s汇编语言代码.so动态库

其中,标 * 的后缀名是gfortran的文件后缀,g77不能识别。

单个源文件生成可执行程序

传统的 Fortran 程序(也就是以 Fortran 77 为代表的)只能用大写字符书写,而且每行前六个字符为特定用途所保留。第一列为字符 C 或 * 所保留,用来表征整行都是注释。第二列到第六列是为标号预留的。代码从第七列开始,到72列结束(73列及以后将被直接忽略,可作注释)。下面是示例程序采用的是传统的 Fortran 格式:

C   helloworld.f
C
      PROGRAM HELLOWORLD
      WRITE(*,10)
   10 FORMAT('hello, world')
      END PROGRAM HELLOWORLD

编译器 gfortran 并不要求所有代码都大写──程序中任何关键词都可以用小写字母。下面的命令将该程序编译成可执行文件:

$ gfortran helloworld.f -o helloworld

注意到:gfortran 默认会将 .f, .for, .fpp, .ftn, .F, .FOR, .FPP 和 .FTN 结尾的文件作为固定格式处理,而将.f90, .f95, .f03, .F90, .F95 和 .F03 结尾的文件作为自由格式来处理。如果我们将上面程序文件重命名为 helloworld.f90,那么我们必须手动指定其为固定格式:

$ mv helloworld.f helloworld.f90
$ gfortran helloworld.f90 -ffixed-form -o helloworld

Fortran 90及以后的标准允许并鼓励用自由的格式书写 Fortran 代码。注释以感叹号(!)开始直到行尾。先前的程序采用自由格式重写如下,其中语句、标号都可从任一列开始:

! helloworldff.f90
!
Program Helloworld
write(*,10)
10 format('hello, world')
        end Program Helloworld

后缀名为 .f90,故 gfortran 将其作为自由格式处理

$ gfortran helloworldff.f90 -o helloworldff

同样,如果将程序重命名为传统后缀名,那么要通过在命令行中加入选项 -ffree-form 进行编译,如下:

$ mv helloworldff.f90 helloworldff.for
$ gfortran -ffree-form helloworldff.for -o helloworldff

由于两种格式的具有很大的区别,程序书写是只能选择其中的一种格式进行书写。注意:遵守后缀约定是很重要的。

时间: 2025-01-21 07:59:08

Fortran编译初步的相关文章

求助,我用Simply Fortran编译一段.f90程序时提示参数属性冲突错误?

问题描述 我查看的一段已经编译好的代码,其中有个参数为"MAXAMP",我修改参数值后重新编译提示错误."Error:PARAMETERattributeof'maxamb'conflictswithPARAMETERattributeat(1)".请问哪位知道这是什么问题吗?跪谢!源代码如下: 解决方案

C++编译初步

C++ 编程中相关文件后缀 a静态库 (archive). C++ .c .cc .cp .cpp .cxx .c++C++源代码(需要编译 预处理).hC或者C++源代码头文件.iiC++源代码(不需编译预处理).o对象文件.s汇编语言代码.so动态库<none>标准C++系统头文件 单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */#include <iostream>int

C编译初步

C 编程中相关文件后缀 .a&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 静态库 (archive)  .c  C源代码(需要编译预处理)  .h  C源代码头文件  .i  C源代码(不需编译预处理)  .o  对象文件  .s  汇编语言代码  .so  动态库 单个源文件生成可执行程序 下面是一个简单的"hello, ubuntu"程序的源代码: /* helloubuntu.c */

一个很奇怪的命名空间问题,请大神解题!

问题描述 昨天晚上在编译初步开发好的程序时,发现一个复杂的机制造成的问题,最终问题确定的原因,就是和awaitasync的支持库有关,但其本质原因是什么?就是想不明白,想请高手们解解题.首先因为我的应用服务端使用了WebApi2.0,客户端使用WinForm进行http访问,为了达到较好的用户体验,客户端采用了awaitasync异步.同时为了支持Winxp,类库只能使用到Net4.0,而Net4.0不支持awaitasync异步.解决这个问题,通过的是微软开发的附加支持包,我使用Nuget安装

Android开发艺术探索——新的征程,程序人生路漫漫!

Android开发艺术探索--新的征程,程序人生路漫漫! 偶尔写点东西分享,但是我还是比较喜欢写笔记,看书,群英传看完了,是学到了点东西,开始看这本更加深入Android的书籍了,不知道适不适合自己,先看吧,不过计划也不会这么快,先写篇博客记录一下,因为到真正看书的时间段中间,还会写点Git和重新学一遍JAVA的博客,可能有些人需要,也有些人不需要,但是我还是挺需要的,断片的毛病得改改,老是记不住东西,这书我会看的很细腻,分析的很详细,所以各位看官,可以小小的期待一下! 第1章 Activity

dll动态库-c调用fortran生成dll,我现在有.c.for.def .lib 文件,不知道怎么重新编译dll

问题描述 c调用fortran生成dll,我现在有.c.for.def .lib 文件,不知道怎么重新编译dll 我现在有的文件如下: BLAS.lib CMB82.c CMB82.def CMB82.inc CMB82a.for CMB82b.for LAPACK.lib WKShead.h 这是在网上下的别人的DLL源文件,怎样才能重新编译成dll文件

fortran-Code::Blocks怎样自动识别Fortran源码格式?

问题描述 Code::Blocks怎样自动识别Fortran源码格式? 本人菜鸟,在用Code::Blocks编译一个大型Fortran程序时遇到以下错误信息:-------------- Build: Debug in BernLib (compiler: PGI Fortran Compiler)--------------- pgfortran.exe -g -module objDebug -c ..LibBERNFORAMBCHN.f -o objDebugLibBERNFORAMBC

使用IBM XL CC++和XL Fortran编译器调试经优化的代码

软件开发者们在开发产品级代码时常会面对一个艰难的选择,你总是希望你的代码性能优越,这意味着你 需要在高优化级别上编译它:同时,你可能希望调试你加入产品中的这份二进制代码,而不是编译时没有经过 优化的源文件.如果你尝试过调试优化过的代码,你可能已经知道这其中的难处了: 源代码语句不按顺序执行,或者在你希望它们执行的时候它们没有: 变量没有按预期地进行更新: 变量没有定义的值,甚至没有一个定义的标识: 在调试器内对变量的更新对程序执行不起作用 . 这不是因为编译器出了什么差错,它设计的初衷就是为了保

VC++调用Fortran生成的DLL实例

VC++++和Fortran混合编程借助于Fortran生成的DLL进行 (采用C默认的传址方式进行函数参数传递) 1.Fortran 生成DLL 新建Fortran DLL程序test1.f 添加如下代码: ! test1.f90 ! ! FUNCTIONS/SUBROUTINES exported from test1.dll: ! test1 - subroutine !示例没有返回值的子例程 subroutine test1(a,b) ! Expose subroutine test1