Except me

by

 

This works just fine:
=======================================
CLS: CALL a: CALL b: SYSTEM
SUB a: Num = 1: GOSUB x: EXIT SUB
x: PRINT "Got Here"; Num: RETURN
END SUB
SUB b: Num = 2: GOSUB y: EXIT SUB
y: PRINT "Got Here"; Num: RETURN
END SUB
=======================================

It shows that SUBs keep the two versions of "Num" distinct, as you would expect.

HOWEVER, if you rename "y" to "x" in SUB b, you get
SUB b: Num = 2: GOSUB x: EXIT SUB
x: PRINT "Got Here"; Num: RETURN <--- Duplicate Label

And if you remove that line, hoping to use the "other" label, you get
SUB b: Num = 2: GOSUB x: EXIT SUB <---Label Not Defined

So there is a bug in QBasic whereby labels are not kept distinct for GOSUB/GOTO.

I love GOSUB's! They help reduce the need for indentation and help keep if/then/else constructions small, etc. But now I see a problem. I should be able to keep a library of SUBs and FUNCTIONs and grab any at random and put them in a program I am writing. Now I have to beware of duplicate GOTO labels. Rats!!

So in this Kriegspiel Referee project, each design module should have had, as part of its specification, a rule such as
# Start all internal GOTO/GOSUB labels (if any) with "x"
where "x" is unique for each design module.

We were simply lucky that we encountered no integration errors.

Mac

Posted on Sep 5, 2006, 5:28 AM
from IP address 68.98.164.60

Respond to this message   

Return to Index

Response TitleAuthor and Date
Yes, I noticed that too... on Sep 5
 *I've always just used "SubnameLabel:" and "MainLabel:" on Sep 5
  Not a bad idea on Sep 5
* I did not know that you did not know that but I know that you know that now.Pete on Sep 5
 * But at my age I might not know that tomorrow on Sep 5

 Copyright © 1999-2014 Network54. All rights reserved.   Terms of Use   Privacy Statement