在大型程序中将long变量更改为int类型
Changing long variables to int type in large program
我在将大型代码库迁移到 x64 系统时遇到整数类型的兼容性问题。
期望 INTEGER*4 的 Fortran 例程被传递为在 C/C++ 端定义为 long 的整数。这是一些示例代码:
Fortran 接口:
SUBROUTINE FOO(N)
INTEGER*4 N
!! DO SOME WORK
END
C/C++代码:
long n = 1;
FOO(&n);
当然,这在为x64编译时不起作用,需要将整数定义为int。那些类型的电话打了无数次,用手代替它们将永远。
是否有更有效的方法来进行这些更改?
首先像史蒂夫在评论中建议的那样尝试 find-and-replace,这应该有效:
sed -i 's/integer\*4/integer\*8/gI' *.f90
其中 -i
给出文件中的替换,末尾的 I
给出 case-insensitive 搜索,*
符号用 \*
转义。您可能希望将 *.f90
更改为您拥有的扩展名或 *.f*
。
我在将大型代码库迁移到 x64 系统时遇到整数类型的兼容性问题。
期望 INTEGER*4 的 Fortran 例程被传递为在 C/C++ 端定义为 long 的整数。这是一些示例代码:
Fortran 接口:
SUBROUTINE FOO(N)
INTEGER*4 N
!! DO SOME WORK
END
C/C++代码:
long n = 1;
FOO(&n);
当然,这在为x64编译时不起作用,需要将整数定义为int。那些类型的电话打了无数次,用手代替它们将永远。
是否有更有效的方法来进行这些更改?
首先像史蒂夫在评论中建议的那样尝试 find-and-replace,这应该有效:
sed -i 's/integer\*4/integer\*8/gI' *.f90
其中 -i
给出文件中的替换,末尾的 I
给出 case-insensitive 搜索,*
符号用 \*
转义。您可能希望将 *.f90
更改为您拥有的扩展名或 *.f*
。