Fortran編譯錯誤一例

Fortran編譯錯誤一例

login2.stampede(111)$ make
mpif90  -g -ffree-form -DTPV26 -O0 -c -ffixed-line-length-250 -o testInterfaceF.o -I../..//seism_io_interface-v0.2/include testInterface.f
ifort: command line warning #10006: ignoring unknown option '-ffree-form'
ifort: command line warning #10006: ignoring unknown option '-ffixed-line-length-250'
testInterface.f(1): error #5149: Illegal character in statement label field  [p]
program main
^
testInterface.f(1): error #5149: Illegal character in statement label field  [r]
program main
-^
testInterface.f(1): error #5149: Illegal character in statement label field  [o]
program main
--^
testInterface.f(1): error #5149: Illegal character in statement label field  [g]
program main
---^
testInterface.f(1): error #5149: Illegal character in statement label field  [r]
program main
----^
testInterface.f(1): error #5118: First statement in file must not be continued
program main
-----^
testInterface.f(2): error #5149: Illegal character in statement label field  [u]
    use mpi
----^
testInterface.f(3): error #5149: Illegal character in statement label field  [i]
    implicit none
----^

解決辦法:
mv testInterface.f testInterface.f90

字符串Fortran與C混合調用注意事項

C/FORTRAN 混合編程時,簡單變量在兩種語言中都有直接對應的類型,堆棧調用的規則也比較簡單。
但字符串、字符串數組的傳遞可能是個特例。
由於不同的FORTRAN編譯器,對字符串的堆棧解釋不同,本文介紹的方法僅保證在gcc 與 gfortran環境下適用。

C調用Fortran例子

int main()
{
…….
char s[7];
int b[3];

cstrng_( s, &b[1], 7L );

}
Fortran中
SUBROUTINE cstrng(s, b2)
CHARACTER(*) s
INTEGER b2
END SUBROUTINE openfile

Fortran調用C例子

program main
use mpi
implicit none
…….

CHARACTER (LEN=7) :: s
integer :: b

cstrng( s, b);

end

C中
vois cstrng_(char *s, int *b2, unsigned slen)
{
char cs = (char)malloc(sizeof(char)*(slen+1));
strncpy(cs, s, slen);
strncpy(&cs[slen], “\0”, 1);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章