Generally it's not possible to initialize global variables with values from other variables. Only constants can be used.
Example with Integer:
Static As Integer I1 = 1234 Static As Integer I2 = I1 Static As String S1 = "Hello!" Static As String S2 = S1 Print I1, S1 Print I2, S2
(2) error 11: Expected constant in 'Static As Integer I2 = I1'
(4) error 78: Var-len strings cannot be initialized in 'Static As String S1 = "Hello!"'
(5) error 11: Expected constant in 'Static As String S2 = S1'
But with UDT and constructors, that compiles and works:
Type UDT Dim As Integer I Dim As String S Declare Constructor (Byval i As Integer, Byref s As String) Declare Constructor (Byref u As UDT) End Type Constructor UDT (Byval i As Integer, Byref s As String) This.I = i This.S = s End Constructor Constructor UDT (Byref u As UDT) This.I = u.I This.S = u.S End Constructor Static As UDT U1 = UDT(1234, "Hello!") Static As UDT U2 = U1 Print U1.I, U1.S Print U2.I, U2.S
Indeed, it's possible to use global constructors that will be executed before the main part of the program to initialize global variables for which this is needed. That's what FreeBASIC does for global variables that have constructors.
For the first case, FreeBASIC could effectively do the same (using also global constructors principle) in order to initialize global variables from others, and then this case could be allowed. This technique could also be used to allow initialization of global dynamic strings.