如何声明全局变量
问题描述:
我有一个程序在同一个程序中调用函数,但我想声明并初始化顶部的变量并在程序结束时访问它们。如何声明全局变量
!Declaration
INTEGER TOPCHORD,BOTCHORD, SUPPS, PURLINS;
!Initialization
! Define Layers for connecting lines
TOPCHORD = 32
BOTCHORD = 32
SUPPS = 36
PURLINS = 30
INTEGER FUNCTION IFLANGE1(IEND1,IEND2,ISUP)
IFLANGE1=TOPCHORD
SELECT CASE(IEND1)
CASE(2,4,6,8,9,10)
IFLANGE1=BOTCHORD
IF(ISUP.EQ.1)IFLANGE1=SUPPS
END SELECT
SELECT CASE(IEND2)
CASE(2,4,6,8,9,10)
IFLANGE1=BOTCHORD
IF(ISUP.EQ.1)IFLANGE1=SUPPS
END SELECT
RETURN
END
我得到错误变量“补充程序”引用但没有设置
答
你可能想看看文档 - 你错过了几个重要的声明。 (同时尝试始终包含implicit none
- 这对于捕捉某些问题非常有用)。
稍微修改代码应该编译是
!Declaration
INTEGER TOPCHORD,BOTCHORD, SUPPS, PURLINS;
!Initialization
! Define Layers for connecting lines
TOPCHORD = 32
BOTCHORD = 32
SUPPS = 36
PURLINS = 30
contains !Indicate that the program unit contains other procedures
INTEGER FUNCTION IFLANGE1(IEND1,IEND2,ISUP)
IFLANGE1=TOPCHORD
SELECT CASE(IEND1)
CASE(2,4,6,8,9,10)
IFLANGE1=BOTCHORD
IF(ISUP.EQ.1)IFLANGE1=SUPPS
END SELECT
SELECT CASE(IEND2)
CASE(2,4,6,8,9,10)
IFLANGE1=BOTCHORD
IF(ISUP.EQ.1)IFLANGE1=SUPPS
END SELECT
RETURN
END FUNCTION !End the function definition
END !This is a required end statement to say we've reached the end of the program
这是不是最好的风格等,但有变化的最小数量进行编译。
对于任何稍微复杂的程序,我强烈建议使用模块来存储要从代码的不同部分访问的变量(以及程序)。
你用什么编译器来编译你的例子?这真的是你正在使用的确切代码(或重现了错误)?当我尝试编译这个时,我从编译器得到了一个非常不同的错误消息。 –
你的问题的一般答案是 - 你不。全局变量的使用是任何现代编程语言中的反模式,因为这种肮脏和不可预知的行为。最好用本地代码替换它们,并将它们传递给你想修改它们的过程,或者给它们分配函数的返回值。 – Chaosit
如图所示,顶部的声明不是全局的,而是本地的主程序。这里真的没有足够的东西来看看你的全球意味着什么 – agentp