Correct Answer everywhere: OPTION A
My Answer: OPTION C
While certainly, Option A is correct one and the sources like https://en.wikipedia.org/wiki/Goto#Criticism are evidence of its correctness. And had Option C be something else, then Option A would have been the default choice.
But, Option C, modifying programs means: ANALYZING + ALTERING the code.
Changing any line of code in a program with UNRESTRICTED NUMBER OF gotos necessitates fully analyzing whole program again for verification. As might somewhere at the end of the function, there would be a goto targeting the line we have modified.
So, it is just a contest between Option A and Option C. And for me C is more suitable.
Talking about others:
Option B: It makes programs more inefficient.
1. Some programs like DESIGNING STATE MACHINES in c would be much efficient with goto.
2. Multi-level loops could be much efficient with goto then with break,continue and if-elses.
3. Can be optimal too:
In Donald Knuth's Structured Programming with go to Statements, which analyzes many common programming tasks and finds that in some of them GOTO is the optimal language construct to use.(same wiki link)
Option C: It results in the compiler generating longer machine code.
When a goto is converted to ASSEMBLY CODE, just a JMP #address, would be sufficient. Also concrete examples would be:
1. end-of-function garbage collection, where a function has more than one exit points and at each exit point we have to perform garbage collection could be replaced by a goto statement at all these exit points targeting to a place at the end-of-the-function, thus using only one place for garbage collection.
2. Low-level performance improvements
This is only valid in perf-critical code, but goto statements execute very quickly and can give you a boost when moving through a function. This is a double-edged sword, however, because a compiler typically cannot optimize code that contains gotos.
Note that in all these examples, gotos are restricted to the scope of a single function.
(StackOverflow)
3. Reduces Code Size too:
Many Programmers, including Linux Kernel designer and coder Linus Torvalds or software engineer and book author Steve McConnell, also object to Dijkstra's point of view, stating that GOTOs can be a useful language feature, improving program speed, size and code clarity, but only when used in a sensible way by a comparably sensible programmer. (same wiki link)