The C/C++ Language

Microsoft’s implementation of the C and C++ languages for the Visual C++ product has its various deliberate extensions and quirks and outright defects.

Some may get written up here, and even set into a framework, but even if this exercise ever amounts to a systematic presentation of how Microsoft treats the language, it is absolutely not my intention to write anything like a primer on C or C++ as programming languages. The assumption through all these notes is, and always will be, that the subject is Microsoft’s implementation of the languages, without regard for any standard, let alone for any other implementations.

Moreover, the focus is firmly on C++, as implemented in C1XX.DLL, which is the front-end C++ compiler. If some point is made without speaking specifically about C, it is not because the point applies equally to C and C++ but because the C compiler (C1.DLL) simply has not been studied on the point.

There is also a general restriction of scope concerning errors. These notes generally take the view that all errors are effectively fatal. Where an error is not actually declared a fatal error, it is generous of the compiler to continue (especially so that the programmer may attend to multiple errors in one go, before recompiling), but it is the first error that counts: if the code is to compile, the programmer cannot avoid attending to that first error. It is important that the message displayed for the first error be accurate—perhaps not complete, but at least not misleading—which is why these notes do take the trouble to cite error numbers that follow from failing to meet some expectation of the language. However, quirks in the compiler’s sometimes valiant attempts at continuing after an error are not reasonable objects of criticism and are ignored for these notes—except, of course, if they are so spectacularly bizarre that I can’t resist.

It may be some time before what gets written here is anything but random and sparse. The undertaking is huge, its continuation is uncertain and its particular points of interest to me on any one visit to the work are highly variable. That said, the product documentation is too often incorrect and incomplete—embarrasingly so, one might think, given Microsoft’s resources and the profits that Microsoft makes at least indirectly from the Visual C++ product. I therefore have concluded that it’s better to publish fragments and unannotated lists than to leave information sitting in a virtual drawer gathering virtual dust awaiting satisfaction of my usual and obsessive desire for completeness. For your part, exercise more than your usual caution about believing what you read.