Microsoft KB Archive/70059

= INFO: Using Goto Label Before Closing Brace Causes C2143 Error =

Q70059

-

The information in this article applies to:


 * The Microsoft C/C++ Compiler (CL.EXE)
 * Microsoft C compiler for MS-DOS, versions 6.0, 6.0a, 6.0ax
 * Microsoft C compiler for OS/2, versions 6.0, 6.0a
 * Microsoft C/C++ compiler for MS-DOS, version 7.0
 * Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5
 * Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 4.0, 5.0

-

SUMMARY
When using a goto statement, the label referenced by that statement must be followed by a null statement (a semicolon) if it immediately precedes a closing curly brace (}). Failure to include a semicolon in this case results in the following compiler error:

error C2143: syntax error : missing ';' before '}'

MORE INFORMATION
The requirement of the null statement before the closing curly brace is part of the C language and is documented in the ANSI specification in Section 3.6.3 as follows:

{{blockquote|text=A null statement may also be used to carry a label just before the closing } of a compound statement.}} To eliminate a C2143 error caused by this situation, add a semicolon after the label. The sample code below illustrates the problem.

Sample Code
#include 
 * 1) include 

void main(void) {    char ch;

while(!kbhit) {         printf(&quot;Want to end this loop?  (y/n)  \n&quot;); if((ch = getche) == 'y') {               printf(&quot;out of loop\n&quot;); goto mybug; }         printf(&quot;More loop processing here....\n&quot;); mybug:  /* This line generates the syntax error      */ }         /*       replace with: mybug:  ;             */ } Additional query words: 8.00 8.00c 9.00

Keywords : kbcode kberrmsg kbCompiler kbVC100 kbVC150 kbVC200 kbVC400 kbVC500

Issue type : kbinfo

Technology :

Last Reviewed: September 4, 2001

-

[mailto:MSDN@MICROSOFT.COM Send feedback to Microsoft]

© 2002 Microsoft Corporation. All rights reserved.