if I do
Code: Select all
if(name_declared("newvar")!=5){
newvar = 10
}
I am not really sure what is going on as anything inside the if statement does not seem to be executed, but newvar is "declared" (to 0).
So I can understand that if the if statement is false variables inside are put in the symbol table with default value of 0. But then why isn't the if statement true?
if I instead do this:
Code: Select all
type = name_declared("newvar")
if(type !=5){
newvar = 10
}
so how do the code blocks differ actually?
further, the behaviour is different in a procedure.
That is, every variable is in the symbol table immediately after the function is defined, but before the function can be called. So everything using name_declared within the procedure/function with a variable defined within the function is on a declared variable.
I know name_declared shouldn't often be used, but it is useful for testing a file with default/test values if it isn't loaded from another file.
And I know there are alternatives such as using Python, but I found this strange and wondered why...
some more test code:
Code: Select all
printf("declared a: %g\n",name_declared("a")) // -> declared a: 0
printf("name_declared(a)!=5 %g\n",name_declared("a")!=5) // -> name_declared(a)!=5 1
type=name_declared("a")
if(type!=5){
printf("in if a\n") //-> prints
a = 10
printf("value: %g\n",a) //-> prints
}
printf("declared a: %g, value: %g\n",name_declared("a"),a) //-> declared a: 5, value: 10
printf("declared b: %g\n",name_declared("b")) //-> declared b: 1
printf("name_declared(b)!=5 %g\n",name_declared("b")!=5) // -> name_declared(b)!=5 1
if(name_declared("b")!=5){
printf("in if b\n") // doesn't print
b = 10
printf("value: %g\n",b) // doesn't print
}
printf("declared b: %g, value: %g\n",name_declared("b"),b) //-> declared b: 5, value: 0
if(name_declared("c")!=5){
printf("in if c\n") //doesn't print
c = 10
printf("declared c: %g, value: %g\n",name_declared("c"),c) //doesn't print
}
proc testProc(){
printf("name_declare\n")
printf("declared d: %g\n",name_declared("d")) // -> declared d: 5
printf("name_declared(d)!=5 %g\n",name_declared("d")!=5) // -> name_declared(d)!=5 0
type=name_declared("d")
if(type!=5){
printf("in if d\n") // doesn't print
d = 10
printf("value: %g\n",d) // doesn't print
}
printf("declared d: %g, value: %g\n",name_declared("d"),d) //-> declared d: 5, value: 0
printf("declared e: %g\n",name_declared("e")) //-> declared e: 1
if(name_declared("e")!=5){
printf("in if e\n") // doesn't print
e = 10
printf("value: %g\n",e) // doesn't print
}
printf("declared e: %g, value: %g\n",name_declared("e"),e) //-> declared e: 5, value: 0
if(name_declared("f")!=5){
printf("in if f\n") //doesn't print
f = 10
printf("declared f: %g, value: %g\n",name_declared("f"),f) //doesn't print
}
}
testProc()