Executable code between declarations causes the C2143 error message or the C2144 error message (58559)



The information in this article applies to:

  • Microsoft Visual C++, 32-bit Editions 6.0
  • Microsoft Visual C++, 32-bit Editions 5.0
  • Microsoft Visual C++, 32-bit Editions 4.0
  • Microsoft Visual C++, 32-bit Editions 2.0
  • Microsoft Visual C++, 32-bit Editions 1.0
  • Microsoft Visual C++ for Windows, 16-bit edition 1.51
  • Microsoft Visual C++ for Windows, 16-bit edition 1.5
  • Microsoft Visual C++ for Windows, 16-bit edition 1.0

This article was previously published under Q58559

SYMPTOMS

In Microsoft C, compiler errors C2143 and C2144 are defined as follows:
C2143: syntax error : missing 'token1' before 'token2'

C2144: syntax error : missing 'token' before type 'type'

CAUSE

You may receive this error message if your program places executable code before a data declaration, an acceptable practice in Kernighan-and-Ritchie C. This practice has been outlawed in later versions of the ANSI drafts.

This error message will normally occur if a required closing curly brace (}), right parenthesis [)], or semicolon (;) is missing.

RESOLUTION

Placing all data declarations before all executable code corrects the programming error.
void main( )
{
   int i;
   printf( "Hello world!\n" );
   {
      int j;
   }
}
				
Note In the C++ language, it is legal to declare data within a block of executable code.

MORE INFORMATION

Sample code

The following code demonstrates this error message.
/* Compile options needed: none
*/ 

#include <stdio.h>

void main(void)
{
   int i;
   printf("Hello World\n");
   int j;
}
				
Compiling this code with a version of Microsoft C prior to C/C++ 7.0 will return the following error message:
C2144: syntax error : missing ';' before type 'int'
C/C++ version 7.0 and Visual C/C++ issue the following error:
C2143: syntax error : missing ';' before 'type'

Modification Type:MinorLast Reviewed:6/14/2006
Keywords:kberrmsg kbtshoot kbCompiler kbprb kbVC152fix KB58559 kbAudDeveloper