Error: Jump to case label

后端 未结 4 870
春和景丽
春和景丽 2020-11-27 09:56

I wrote a program which involves use of switch statements... However on compilation it shows:

Error: Jump to case label.

Why doe

4条回答
  •  轮回少年
    2020-11-27 10:26

    C++11 standard on jumping over some initializations

    JohannesD gave an explanation, now for the standards.

    The C++11 N3337 standard draft 6.7 "Declaration statement" says:

    3 It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps (87) from a point where a variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has scalar type, class type with a trivial default constructor and a trivial destructor, a cv-qualified version of one of these types, or an array of one of the preceding types and is declared without an initializer (8.5).

    87) The transfer from the condition of a switch statement to a case label is considered a jump in this respect.

    [ Example:

    void f() {
       // ...
      goto lx;    // ill-formed: jump into scope of a
      // ...
    ly:
      X a = 1;
      // ...
    lx:
      goto ly;    // OK, jump implies destructor
                  // call for a followed by construction
                  // again immediately following label ly
    }
    

    — end example ]

    As of GCC 5.2, the error message now says:

    crosses initialization of

    C

    C allows it: c99 goto past initialization

    The C99 N1256 standard draft Annex I "Common warnings" says:

    2 A block with initialization of an object that has automatic storage duration is jumped into

提交回复
热议问题