This document, "Guide to VAX C" (Order No. AI-L370C-TE, March 1987) by Digital Equipment Corporation, provides comprehensive information for programmers developing and debugging VAX C programs in the VMS (Version 4.2 or higher) and MicroVMS environments. It aims to serve as a reference for experienced programmers, detailing the VAX C programming language, its development within the VMS ecosystem, and considerations for cross-system portability.
The guide is structured into three main parts:
- Developing VAX C Programs on VMS: Covers the practical steps of creating, compiling, linking, and running VAX C programs using Digital Command Language (DCL) commands, along with an introduction to using the VMS Debugger.
- VAX C Programming Concepts: Explains fundamental C language constructs as implemented in VAX C, including program structure, statements, expressions, operators, data types, declarations, storage classes, allocation, and preprocessor directives.
- Using VAX C Features on VMS: Delves into VMS-specific functionalities, such as utilizing VAX Record Management Services (RMS) for file handling and integrating VAX C subprograms with other VAX languages within the Common Language Environment.
Key new and changed features highlighted in VAX C Version 2.3 (which this revised document supersedes previous versions):
- Support for VAX Source Code Analyzer (VAXSCA).
- Incompatibility between modules compiled with VAX C V1.n and V2.n compilers, requiring re-compilation.
- The VAX C Run-Time Library (RTL) is now distributed with the VMS Run-Time Library.
- Introduction of function prototypes for argument type checking and conversion during function declarations and calls.
- Discouragement of using the underscore as the first character in program identifiers due to its reserved use for implementation-specific elements.
- Changes to floating-point arithmetic, allowing VAX C to use the precision of the operand when
/PRECISION=SINGLE is specified, rather than always double precision.
- Support for
volatile and const data type specifiers.
- Support for the
/INCLUDE_DIRECTORY qualifier for user-defined include files.
- Support for variant structure and union declarations and vacuous tag declarations.
- Addition of hexadecimal characters in escape sequences and
_align for data alignment.
- New preprocessor directives:
#pragma and #elif, and the defined operator in #if directives.
- Inclusion of predefined macros like
__DATE__, __FILE__, __LINE__, and __TIME__.
- Allowance for macro substitution within
#include preprocessor directives.
- Addition of new library files,
limits.h and float.h, and enhanced diagnostic messages.