rem*_*mek 9 fortran pointers gfortran
我想检查是否已经定义了派生类型中的指针.我写了以下简单的代码来向您展示我的问题:
program test
implicit none
type y
real(8), pointer :: x(:)
end type y
type(y), pointer :: w(:)
allocate(w(2))
allocate(w(1)%x(2))
write(*,*) associated(w(1)%x), associated(w(2)%x)
end program test
Run Code Online (Sandbox Code Playgroud)
使用gFortran 4.4.1编译此代码并在Ubuntu上运行它会得到结果:
T F
Run Code Online (Sandbox Code Playgroud)
而在Windows Vista上使用英特尔Fortran编译器11.0编译的相同代码提供:
T T
Run Code Online (Sandbox Code Playgroud)
第一个结果(gFortran)是我实际期待的.但是英特尔编译器提供不同结果的事实让我担心我的代码可能不正确.我是否在这个例子中做了一些非常错误的指针?有什么想法或解释吗?
非常感谢您的帮助!
Tim*_*omb 13
您正在测试是否关联指针而未明确使用nullify指针.关于常见Fortran错误备注的一个很棒的页面(删除了代码示例):
许多人认为从未关联过的指针的状态是.not.相关.这是错误的.(...)当声明指针时,其状态未定义,并且无法使用
associated内在函数安全地查询.
看起来gfortran编译器可能被设置为显式地使声明上的指针无效 - 您应该想到这就像编译器自动将声明的变量设置为零,并且不依赖于该行为.如果你想确定,你将自己取消它.
编辑:
我正在阅读英特尔编译器指南,它指定了如何确保指针无效 - 您可以将派生类型设置为
type y
real(8), pointer :: x(:) => null()
end type y
Run Code Online (Sandbox Code Playgroud)
但请注意,似乎这仅限于Fortran 95,如链接文章中所述.
| 归档时间: |
|
| 查看次数: |
3612 次 |
| 最近记录: |