INFO: C Ignores Preprocessor Directives Inside of Comments

ID: Q72793


The information in this article applies to:
  • The Microsoft C/C++ Compiler (CL.EXE)
    • Microsoft C for MS-DOS, versions 6.0, 6.0a, 6.0ax
    • Microsoft C for OS/2, versions 6.0, 6.0a
    • Microsoft C/C++ for MS-DOS, version 7.0
    • Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5, 1.51
    • Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 2.1, 4.0, 5.0


SUMMARY

If a preprocessor directive is contained in a comment, the Microsoft C compiler may generate a message similar to the following:

fatal error C1004: unexpected end-of-file found
The exact error depends upon which directive is actually placed in the comment.


MORE INFORMATION

This is the expected behavior. The message is generated because the compiler evaluates comments before preprocessor directives, thereby ignoring a preprocessor directive within a comment block.

The sample code below illustrates this situation. The #endif directive is inside of a comment because the first comment is missing a closing comment delimiter (*/). The compiler generates a C1004 error when it reaches the end of the file and has not encountered an #endif directive to match the #if directive.

Sample Code


/* Compile options needed: none
*/ 

void main ()
{
#if 0
  /* comment begins but doesn't end
   printf ("here 0\n");
#endif
  /* comment */ 
   printf ("here 2\n");
} 

Additional query words: 8.00 8.00c 9.00 9.10

Keywords : kbcode kbCompiler kbVC100 kbVC150 kbVC151 kbVC200 kbVC210 kbVC400 kbVC500
Version : MS-DOS:6.0,6.00a,6.00ax,7.0; OS/2:6.0,6.00a; WINDOWS:1.0,1.5,1.51; WINDOWS NT:1.0,2.0,2.1,4.0,5.0
Platform : MS-DOS NT OS/2 WINDOWS
Issue type : kbinfo


Last Reviewed: July 6, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.