Heh... I used to own a C16, and should still have an Atari around somewhere. Both run BASIC interpreter. The nice thing about C++ is, that it supports functions. So you could simply call a function (method if you use classes / objects in C++) and run in loops and branches. GOTO in C++ is bad form, I agree.

But in Basic on the other hand, the only thing you have to move around in execution, other than a straight line, is GOTO. Yes. This facilitates spagetti code. One of the ways around this, was to draw up a schema of line-number-blocks, where each block would have its own function. So line 0 to 1000 would be your main, line 2000 to 2100 your first 'function', 2110 to 2200 your second and so on.

If you were lucky, you had a version of BASIC that supposed not only GOTO, but also GOSUB. This nifty little statement did basically the same as GOTO, but also pushed a return address on a stack. So if at the end of your function, you called RETURN, it'd pop the line-number from the stack from where you called the GOSUB and continue from there ^_^

For what it's worth: Compiling C to assembly and then machinecode, all those function calls, loops and branches are (often) converted to assembly 'jmp' instructions. These are goto's. ;-)