INFO: Compiler Errors When Compiling a C++ File as a C File

ID: Q104672


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


SUMMARY

The following error is typically the first of many returned by the Microsoft C/C++ Compiler when attempting to compile a file that includes a C++ header file such as IOSTREAM.H in a C program:

ios.h(33) : error C2282: 'class' is followed by 'streambuf'. (missing ','?)
In more recent versions of the compiler, the system header files use #ifdef __cplusplus to prevent the contents from being parsed when compiled as "C" code.

There may also be multiple C2065, C2297, C2054, C2085, C2143, and C2144 errors, and eventually a C1003 error indicating that the error count reached 100.


MORE INFORMATION

The C/C++ compiler invokes either the C compiler or the C++ compiler according to the file's extension. If it ends in .C, the C compiler is invoked; if it ends in .CPP or .CXX, the C++ compiler is invoked.

To invoke the C++ compiler on a file that ends in .C or some other extension, use the /Tp switch to explicitly specify a C++ source file.

The sample code below produces the errors

error C2065: 'cout' : undeclared identifier
error C2297: '<<' : illegal, right operand has type 'char [12]'
if compiled with:

   cl hello.c 
The code compiles fine if compiled with:

   cl hello.cpp 
-or-

   cl /Tp hello.c 

Sample Code


/* Compile options needed:  None
*/ 

#include <iostream.h>

void main (void)
{
     cout << "Hello World";
} 

Additional query words: 8.00 8.00c 9.00 9.10

Keywords : kbCompiler kbCPPonly kbVC100 kbVC150 kbVC151 kbVC152 kbVC200 kbVC210 kbVC400 kbVC500 kbVC600
Version :
Platform :
Issue type : kbinfo


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