Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
DIM - AS - VARIABLE TYPE likely bug
#26
(05-06-2024, 05:56 PM)Dimster Wrote: I'm likely taking this topic a little more off the issue but rather than starting a new thread hoping it's ok to ask it here ... Is there an order to the assignment of a Type for a variable?
For example
Dim A$
Dim A
Dim A!

In the order above, why would not QB64, upon finding the 2nd Dim statement, simply change the type of A from a string to a single. Similar to a redim. So that in this dim order example the last Dim statement for A (A!) would rule? 

I haven't tested this yet but from past coding, this does appear to be the case (ie a 2nd incident of a change in Variable Type but no change in the Variable name) if Dimming locally rather than globally. I think I have in the past had a Dim A$ in one sub and DIM A in another sub without an error message.

Steve's earlier comment about the 2nd encounter of the same Variable Name triggering the error message of Name already in use must only apply to Globally Named variables correct?
It applies to variables in the same NAMESPACE.

Code: (Select All)
Dim a As Double

Sub foo
    Dim a As Long
    'dim a as single
End Sub

Take the above example, as an example.  Big Grin

Written as is, it causes no errors with the IDE, nor any problems with compiling and running (and doing nothing as the code does nothing).  

However, if you unremark that 'dim a as single, it suddenly tosses an error on you!!

Why??

You're trying to dimension a variable with the same name, in the same scope/namespace!

That first Dim a As Double, applies only in the main module.  It's not DIM SHARED, so it's not a global variable.  The scope is limited.  The second Dim a As LOng, is inside the SUB foo -- it's a variable only local for the SUB and not in scope anywhere else.   Having it be the same name, but a different type than the original a, isn't a problem.

That dim a as single, however, now has two variables named "a" being defined in the same scope -- both as local variables in SUB foo.  THIS IS NOT ALLOWED!!  ERROR!! ERROR!! THE IDE IS REVOKING YOUR COMPILING PRIVILEDGES!!


So it's a rule of "Can't define the same variable-without-a-suffix as a type more than once, *while in the same namespace/scope range*."  Wink

As for your explicit example of: 
Code: (Select All)
Dim A$
Dim A
Dim A!
In this case,  it all depends of what your DEFAULT VARIABLE TYPE is.   IF the default type is single, then DIM A would define A as SINGLE, and then the A! would frown upon you calling its name two in DIM statements.  IF the default type was anything else -- such as DEFLNG A-Z would make the default type LONG, then DIM A would solidify its type AS LONG, and then there'd be no problem with Dim A! as that'd be explicitly declaring A-as-SINGLE variable.
Reply


Messages In This Thread
DIM - AS - VARIABLE TYPE likely bug - by bartok - 05-03-2024, 06:59 AM
RE: DIM - AS - VARIABLE TYPE likely bug - by SMcNeill - 05-06-2024, 08:21 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
Question Experimenting with a "StringList" type for simpler handling of string arrays/lists Heimdall 18 1,191 12-19-2025, 12:51 PM
Last Post: Heimdall
  Sub not Reconizing Dim as String pmackay 18 1,465 10-16-2025, 03:32 PM
Last Post: pmackay
  for performance, what's the best variable type to use for boolean _TRUE & _FALSE ? madscijr 12 1,230 09-29-2025, 02:59 PM
Last Post: dakra137
  Loading from file into _MEM? and LEN a TYPE... Unseen Machine 9 960 08-03-2025, 02:55 AM
Last Post: SMcNeill
  Either I'm doing MID$( wrong or it has a bug TDarcos 4 804 04-13-2025, 11:14 PM
Last Post: TDarcos

Forum Jump:


Users browsing this thread: 1 Guest(s)