As the ‘unnamed member’ let me say that this first came up when you asked for help debugging some code that wasn’t working the way you wanted. What you showed me was a mass of spaghetti.
‘Good code’ is readable by someone else (or yourself in six months).
It should be in short manageable and readable sections.
Your variable names should have easily understood purpose/meaning.
Long functions/procedures/methods are to be avoided. It is best to break them up into more manageable size components.
Goto’s are uneeded in any modern language, other structures are available that allow for the creation of program logic without the need to resort to goto’s. Use of goto’s create code that is unreadable, convoluted, and often termed ‘spaghetti’. http://www.drdobbs.com/jvm/programming-with-reason-why-is-goto-bad/228200966 The ONLY time goto should be used is the JMP commands in assembly language (and then only if you are a masochist to be using assembly).
Global variables are easy. They also allow the programmer to avoid thinking about the problem at hand and structuring and compartmentalizing their code. The biggest drawback to globals is that you can be modifying one and WHILE you are modifying it, the same variable can be getting modified by another part of your program (thread/ISR/etc…)… and that leads to hard to debug problems. Unfortunately, on limited resource machines, like the AVR 328’s in most Arduino’s globals are a fact of life, but there use should be minimized.