Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
sleep command in compiler no warning
#1
This was unexpected but I did it anyway. (my dumb mistake)

Using .1 as a value for sleep gives no warning in the compiler.  It must be an integer (a whole number).  Likely there are other commands requiring integer inputs.  Which likely also do not warn.  Shouldn't the pre-compiler be finding this ?  I got no idea what integer was used by the compiler for .1 ?

Just an observational comment
I did just go with _Delay instead
Reply
#2
I ran across a similar incident, at the start of the week, where the pre-compiler missed an error as well. It had something to do with an array but with the no-warning power outages this week, due to corrupt politicians who are letting this state go to hell to make a buck, I don't know if I can retrieve the example. I'm a little burnt out on trying. Anyway, the compiler system is pretty damn good, but no, it's not perfect. Often the small stuff, unless it's a super easy fix, gets tabled. On the plus side, what our developers have done to progress this language in the bigger picture since has been nothing short of remarkable. That's just my opinion, but everyone is entitled to it.

Pete
Reply
#3
Getting the math right was always my biggest pet peeve.  Like using an unsigned byte by accident on a signed word location of memory.  Lot's of high level and even assembler languages let you do dumb things.  Not stopping or warning, just sit back and laugh at you.  Yes doing all the math directly does speed up the program.  But like going mach 2 doesn't work all the time.  Eventually your going to hit something without using navigation.
Reply
#4
A *lot* of commands are like this -- EVEN ONES YOU WRITE YOURSELF!!  Wink

Code: (Select All)
Print foo(0.1)
Print foo(0.9)


Function foo& (example As Long)
    foo = example
End Function

There's no warning here that we're passing single values to a long variable, and no error either.  BASIC, all the way from back in the days of GW BASIC, simply rolls with what you send it and doesn't issue a strict "type mismatch" error or anything.  When it's looking for an integer type, and you send it a single type, then it converts to the closest integer value as illustrated above.  

If you look at the wiki for our documentation on SLEEP, you'll find this:  https://qb64phoenix.com/qb64wiki/index.php/SLEEP

Quote:Seconds are an optional INTEGER value. If there is no parameter, then it waits for a keypress.

First comment under the info tells you in big bold letters that this is going to be an integer value. By using 0.1 for SLEEP, it's going to behave *exactly* as any other SUB/FUNCTION with an INTEGER-type parameter -- it's going to round your floats down to the nearest integer value. In this case, that SLEEP .1 gets rounded and basically becomes SLEEP 0...

And SLEEP 0 is the command to "Sleep forever and ever and ever and don't bother counting time; only wake up after the user has pressed some button!"...

...which doesn't sound like that's what you were looking for in this case. Big Grin
Reply




Users browsing this thread: 3 Guest(s)