Mil*_*ila 7 fortran initialization
我试图将Fortran子例程中的本地逻辑数组初始化为false,但是我收到错误:
错误#6562:数据initialization-expr对此对象无效.
这里是我的报关表:
integer , intent(in) :: nLOW
integer , intent(in) :: nUP
logical , dimension(nLOW:nUP) :: leastSQUARE = .false.
Run Code Online (Sandbox Code Playgroud)
如果我使用,我会得到同样的错误:
integer :: I
integer , intent(in) :: nLOW
integer , intent(in) :: nUP
logical , dimension(nLOW:nUP) :: leastSQUARE = (/ (.false., I = nLOW:nUP) /)
Run Code Online (Sandbox Code Playgroud)
如果我写:
integer , intent(in) :: nLOW
integer , intent(in) :: nUP
logical , dimension(1:100) :: leastSQUARE = .false.
Run Code Online (Sandbox Code Playgroud)
子程序编译为零错误.知道为什么会这样吗?我显然需要leastSQUARE尺寸nLOW:nUP,所以后者不是一种解决方法.
我认为语言标准禁止错误生成结构,特别是(在Fortran 2008版本中)C506在R503上.这种约束表明了
如果object-name是伪参数,函数结果,命名公共块中的对象,除非类型声明在块数据程序单元中,空白公共对象,可分配变量或自动对象,则不应出现初始化宾语.
leastSQUARE就是这样一个自动对象,其边界只在运行时才知道.您必须将其与声明分开初始化.
为了清楚(感谢@IanH),您必须执行赋值语句以为自动对象提供初始值.我在前一段中对动词初始化的使用不是Fortran标准.