C control flow and goto scope rules: Point out the error in this program that jumps to a label inside another function. #include <stdio.h> int main() { void fun(); int i = 1; while (i <= 5) { printf("%d ", i); if (i > 2) goto here; i++; } return 0; } void fun() { here: printf("It works"); }

Difficulty: Easy

Correct Answer: Error: goto cannot takeover control to other function

Explanation:

Introduction / Context:This problem validates understanding of goto scope rules. A goto can only jump to a label that is in the same function and within the same translation unit in scope. Crossing function boundaries with a goto is prohibited by the C standard.

Given Data / Assumptions:

  • A label here: is defined inside fun().
  • main() attempts goto here;.
  • Loop and print statements otherwise are ordinary.

Concept / Approach:Labels in C have function scope. They are not global symbols; they are only visible and valid within the function in which they are defined. Therefore, goto here; inside main() cannot legally reference here: defined in fun(). Compilers will emit an error such as “label ‘here’ used but not defined” in main, or “label exists in a different function.”

Step-by-Step Solution:Identify the label definition site: in fun().Identify the jump site: in main().Apply rule: labels have function scope → cross-function jump is invalid.Fix by moving the label into main() or restructuring code using functions/returns.

Verification / Alternative check:Compiling yields an error. Refactor to if (i > 2) { fun(); break; } to achieve a similar effect legally.

Why Other Options Are Wrong:fun() cannot be accessed — access is fine; the problem is the cross-function goto. No error — incorrect.

Common Pitfalls:Misunderstanding label scope; using goto for inter-function control transfer instead of calls/returns or flags.

Final Answer:Error: goto cannot takeover control to other function

More Questions from Control Instructions

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion