Oxygen Basic

Information => Open Forum => Topic started by: JRS on January 20, 2013, 10:50:37 PM

Title: Local initalization
Post by: JRS on January 20, 2013, 10:50:37 PM
Quote from: Frederick Harris - Jose Roca Forum
I know in my PowerBASIC coding I frequently rely on the compiler initializing a local to zero.  Only by looking close at a number of programming statements in the body of the procedure on a case by case basis would it be possible to determine whether it was/is necessary or not.

Code: [Select]
SUB test
LOCAL a
PRINT a,"\n"
END SUB

test

jrs@laptop:~/sb/test$ scriba iszero.sb
undef
jrs@laptop:~/sb/test$


@Charles - How does OxygenBasic handle local variable initialization. Is PowerBASIC unique in how it handles local variables?

Title: Re: Local initalization
Post by: Aurel on January 20, 2013, 10:55:54 PM
This is the way how works..easy..right?
Code: [Select]
SUB test
INT a
a=5
PRINT str(a)
END SUB

test()
Title: Re: Local initalization
Post by: Charles Pegge on January 21, 2013, 03:42:04 AM
In the Basic tradition, Oxygen initialises all variables (including arrays) to null.
This can be overridden for local variables in a procedure but it is seldom needed.

Oxygen also delivers clean memory blocks, even at low level:

sys a=getmemory 0x1000

a now points to a block of 4096 null bytes.
Title: Re: Local initalization
Post by: JRS on January 22, 2013, 06:57:38 AM
Quote from: JCFuller - BASIC programming forum
Ed,
  You did have the right idea but instead of b= 0 if I use braces as in int b={0}; I can use it for all data types. I implemented it but need to do a lot more testing. Thanks for the idea.

James

I agree with how Charles is initializing data and structures. What is wrong with using NULL? bc9 is a C translator and that is how C initialize its data and structures from what I understand.

Code: [Select]
a = NULL
a$ = NULL
a[NULL]
a = MyFunction(arg1,arg2,NULL)

In ScriptBasic the undef serves the same purpose as NULL.


Title: Re: Local initalization
Post by: Charles Pegge on January 23, 2013, 02:25:30 AM
In Oxygen, initialisation of local variables to null is the normal rule but it is possible to override it.

function f()
#noinit
sys a
print a
end function

f  'result: '1572416 etc

However this will never work for strings. They are always set to null


Another way to bypass null initialisation is using implicit dim, (a bit like scriptbasic):

va=123   'va is automatically created as sys
vb=42.5  'vb is automatically created as double float


Charles
Title: Re: Local initalization
Post by: JRS on January 23, 2013, 09:21:52 AM
Quote
Another way to bypass null initialisation is using implicit dim, (a bit like scriptbasic):

implicit dim  - I like that term better then smart vars.  :D