主题:形参声明为数组,但调用时传递了标量作为实参,出错~
cacar
[专家分:0] 发布于 2011-05-20 22:49:00
一个subroutine声明了数组参数,但调用时传递了标量,提示错误~在linux下面用gfortran编译成功,但是ifort(vs2005+ifort11)会提示出错~有没有什么开关选项可以关闭这个检查呢?
回复列表 (共11个回复)
沙发
yeg001 [专家分:14390] 发布于 2011-05-20 23:09:00
"调用时传递了标量" 是什么意思? 你在linux下没有开检查,编译通过不代表代码就没问题的哦.
板凳
cgl_lgs [专家分:21040] 发布于 2011-05-21 07:28:00
把非数组元素当成数组使用是非常危险的~~~~
楼主还是改改程序吧。。。
3 楼
cacar [专家分:0] 发布于 2011-05-22 23:07:00
是不是linux下面gfortran的检查比较松?发现有个别subroutine,声明的形参个数和调用时实参个数(实参少了一个)不一样都可以编译成功??
而对于一楼中的问题,具体的代码和出错信息如下:
//--------调用----------
data nz, idatm,isat,nf,iaer,jaer,isalb,ickp,iout,imom
& / 33, 2, 0, 2, 0, 0, 0, 0, 10, 0 /
call ckint('idatm',idatm,1,0,6,kill)
//--------声明----------
subroutine ckint(label,kk,nn,minval,maxval,kill)
dimension kk(*)
其中ckint的第二个参数kk在声明的时候是数组,而使用的时候直接用了标量。GFORTRAN编译可以通过,而ifort会有如下提示:
error #7836: If the actual argument is scalar, the corresponding dummy argument shall be scalar unless the actual argument is an element of an array that is not an assumed-shape or pointer array, or a substring of such an element. [KK]
有没有哪个选项可以调整IFORT检查级别的??没有的话,只能改代码了~
4 楼
cgl_lgs [专家分:21040] 发布于 2011-05-23 08:20:00
改代码吧。这本来就是错的。
5 楼
cacar [专家分:0] 发布于 2011-05-25 16:15:00
改成这样,现在应该都是scalar了吧,但依然是同样的出错信息。哪位知道怎么解决,劳驾指点一二~
//--------调用----------
integer idatm
data nz, idatm,isat,nf,iaer,jaer,isalb,ickp,iout,imom
& / 33, 2, 0, 2, 0, 0, 0, 0, 10, 0 /
call ckint('idatm',idatm,1,0,6,kill)
//--------声明----------
subroutine ckint(label,kk,nn,minval,maxval,kill)
!dimension kk(*)
integer kk
6 楼
yeg001 [专家分:14390] 发布于 2011-05-25 22:28:00
帖部分源码吧. 我们不知道你省略了什么.
7 楼
cacar [专家分:0] 发布于 2011-05-26 15:53:00
是这样的,ckint()接受两个参数,第一个是字符串,第二个是整型,如下代码会产生前述错误提示,该怎么修改呢?(c程序员写fortran,外行了,望各位指教~):
program Console1
implicit none
! Variables
integer kk
data kk /2/
! Body of Console1
print *, 'Hello World'
call ckint('idatm',kk)
end program Console1
subroutine ckint(label,kk)
character*(*) label
!dimension kk(*)
integer kk
end
8 楼
asymptotic [专家分:16630] 发布于 2011-05-26 16:19:00
C 程序员花一两天时间看看 Fortran 语法,不难的。
9 楼
yeg001 [专家分:14390] 发布于 2011-05-26 16:52:00
那段代码应该是没问题的, 要不试试重新建立工程看看?
10 楼
cacar [专家分:0] 发布于 2011-05-26 16:57:00
[quote]那段代码应该是没问题的, 要不试试重新建立工程看看?[/quote]
的确建立新工程以后就没有这个问题了~好奇怪~暂时结贴吧~
我来回复