Function 为传递给函数的变量赋值会导致分段错误。
考虑一下这个简单的程序:Function 为传递给函数的变量赋值会导致分段错误。,function,fortran,Function,Fortran,考虑一下这个简单的程序: program foo integer bar,idum print * , bar(1) end program function bar(idum) integer idum,bar print * , idum idum = 2 bar = 2 return end 当我运行它时,我在行idum=2 Starting program: /tmp/a.out
program foo
integer bar,idum
print * , bar(1)
end program
function bar(idum)
integer idum,bar
print * , idum
idum = 2
bar = 2
return
end
当我运行它时,我在行idum=2
Starting program: /tmp/a.out
1
Program received signal SIGSEGV, Segmentation fault.
0x000000000040081b in bar (idum=1) at play.f:11
11 idum = 2
不允许我为传递给函数的变量赋值吗?我如何使用它们作为标志 将文本值
1
传递给函数。然后你试着改变它
idum = 2
这是不允许的。代码试图更改文本常量并崩溃,因为这是不可能的
如果要更改函数中的值,则a)它必须是变量,而不是常量值,b)它必须按值传递(Fortran 2003)
在现代Fortran中,始终使用显式接口。我的意思是总是。要么使用模块(首选!!!),要么在简单情况下使用内部函数,如:
program foo
integer bar,idum
print * , bar(1)
contains
function bar(idum)
integer idum,bar
print * , idum
idum = 2
bar = 2
return
end function
end program
编译器可能会告诉你你做错了。尤其是,如果为参数指定intent
:
function bar(idum)
integer bar
integer, intent(in) :: idum
编译器现在会抱怨的。它还将抱怨其他意图。然后,您可以修复代码,使编译器满意
而且总是使用
隐式无
。这不是可选的。这是必需的。您将文本值1
传递给函数。然后你试着改变它
idum = 2
这是不允许的。代码试图更改文本常量并崩溃,因为这是不可能的
如果要更改函数中的值,则a)它必须是变量,而不是常量值,b)它必须按值传递(Fortran 2003)
在现代Fortran中,始终使用显式接口。我的意思是总是。要么使用模块(首选!!!),要么在简单情况下使用内部函数,如:
program foo
integer bar,idum
print * , bar(1)
contains
function bar(idum)
integer idum,bar
print * , idum
idum = 2
bar = 2
return
end function
end program
编译器可能会告诉你你做错了。尤其是,如果为参数指定intent
:
function bar(idum)
integer bar
integer, intent(in) :: idum
编译器现在会抱怨的。它还将抱怨其他意图。然后,您可以修复代码,使编译器满意
而且总是使用隐式无
。这不是可选的。这是必要的