Compaq C
Compaq C
User's Guide for OpenVMS Systems
Order Number:
AA--PUNZL--TK
February 2002
This guide describes using the Compaq C compiler on OpenVMS
systems. It contains information on Compaq C program development in
the OpenVMS environment, Compaq C features specific to
OpenVMS systems, and cross-system portability concerns.
Revision/Update Information:
This revised guide supersedes the
DEC C User's Guide for OpenVMS Systems (Order No.
AA--PUNZK--TK)
Software Version:
Compaq C Version 6.5 for OpenVMS Alpha Systems
Compaq Computer Corporation
Houston, Texas
First Printing, November 1992
Revised, February 2002
© Copyright 2002 Compaq Information Technologies Group, L.P.
COMPAQ, the Compaq logo, VAX, Alpha, VMS, OpenVMS, and Tru64 are
trademarks of Compaq Information Technologies Group, L.P. in the U.S.
and/or other countries. Microsoft and Visual C++ are trademarks of
Microsoft Corporation. UNIX is a trademark of The Open Group in the
United States and other countries. All other product names mentioned
herein may be trademarks of their respective companies.
Confidential computer software. Valid license from Compaq required for
possession, use, or copying. Consistent with FAR 12.211 and 12.212,
Commercial Computer Software, Computer Software Documentation, and
Technical Data for Commercial Items are licensed to the U.S. Government
under vendor's standard commercial license.
Compaq shall not be liable for technical or editorial errors or
omissions contained herein. The information in this document is
provided as is without warranty of any kind and is subject to change
without notice. The warranties for Compaq products are set forth in the
express limited warranty statements accompanying such products. Nothing
herein should be construed as constituting an additional warranty.
This document is available on CD-ROM.
This document was prepared using DECdocument, Version V3.3-1e.
Preface
This guide contains the information necessary for developing and
debugging Compaq C (formerly DEC C) programs on the OpenVMS
operating system. Compaq C is compliant with the International
Standards Organization (ISO) C Standard (ISO 9899:1990[1992]), formerly
the American National Standard for Information (ANSI)
Systems-Programming Language C (document number: X3.159-1989), called
the ANSI C Standard in this guide. Compaq C is an ANSI compliant C
compiler for the OpenVMS operating system on VAX and
Alpha processors and for the Tru64 UNIX®
operating system on Alpha processors. Through use of
command-line options, Compaq C is compatible with older dialects of
C, including common usage C and VAX C.
This guide also includes Compaq C language features specific to
OpenVMS systems, as well as information about porting C
programs to and from OpenVMS and other operating systems. For
more information about porting programs to and from other operating
systems, see the Compaq C Run-Time Library Reference Manual for OpenVMS Systems.
You may send comments or suggestions regarding this guide or any
Compaq C
document by sending electronic mail to the following Internet address:
c_docs@compaq.com
Intended Audience
This guide is intended for experienced programmers who need to develop
Compaq C programs on OpenVMS systems, for users who need
to know the difference between Compaq C and other implementations,
and for experienced C users who need to reference language information
specific to OpenVMS systems. You should be familiar with one
high-level language and should have some familiarity with the DIGITAL
Command Language (DCL). If you are not familiar with or need to
reference information about the DCL, see Chapter 1.
Document Structure
This guide has the following chapters and appendixes:
- Chapter 1 shows how to create, compile, link, and run a
Compaq C program.
- Chapter 2 describes VAX Record Management Services (RMS).
- Chapter 3 describes interlanguage calling, and OpenVMS
System Services, Run-Time Library (RTL) routines, and calling standard
conventions.
- Chapter 4 describes data storage and representation on
OpenVMS systems.
- Chapter 5 describes the preprocessor directives.
- Chapter 6 describes the predefined macros and the built-in
functions.
- Appendix A documents the features that distinguish Compaq C
for OpenVMS Systems from VAX C Version 3.2.
- Appendix B describes common pitfalls when using Compaq C.
- Appendix C provides an overview of the OpenVMS Debugger,
the DIGITAL Text Processing Utility (TPU), the DIGITAL
Language-Sensitive Editor (LSE), the DIGITAL Source Code Analyzer
(SCA), and CDD/Repository.
- Appendix D lists Compaq C compiler messages.
- Appendix E describes implementation-specific limits and
parameters for Compaq C on OpenVMS systems.
- The glossary provides an alphabetical listing of key terms.
Associated Documents
You may find the following documents useful when programming in
Compaq C:
- DEC C Migration Guide for OpenVMS VAX Systems---To help OpenVMS VAX application programmers
migrate from VAX C to Compaq C. (VAX ONLY)
- Compaq C Installation Guide for OpenVMS VAX Systems---For OpenVMS system programmers who install
the Compaq C software on VAX systems. (VAX ONLY)
- Compaq C Installation Guide for OpenVMS Alpha Systems---For OpenVMS system programmers who install
the Compaq C software on Alpha systems. (ALPHA ONLY)
- Compaq C Language Reference Manual---Provides language reference information for
Compaq C on DIGITAL systems.
- Compaq C Run-Time Library Reference Manual for OpenVMS Systems---Provides information on using the Compaq C Run-Time Library (RTL)
functions and macros, and information about porting programs to and
from other operating systems.
- The C Programming Language1---Provides an
excellent tutorial of the C language. Because Compaq C contains
features and enhancements to the ANSI C language, use the Compaq C User's Guide for OpenVMS Systems
and the Compaq C Language Reference Manual as the reference books for the full description of
Compaq C.
- OpenVMS Calling Standard---Describes the concepts used by all OpenVMS
languages to invoke routines and pass data between them. It also
describes the differences between the VAX and Alpha
parameter-passing mechanisms.
Note
1 Brian W. Kernighan and Dennis M.
Ritchie, The C Programming Language, Second Edition (Englewood
Cliffs, New Jersey: Prentice Hall, 1988).
|
Conventions Used in this Document
Table 1 lists the conventions used in this guide.
Table 1 Conventions Used in this Guide
Convention |
Meaning |
[Return]
|
The symbol
[Return] represents a single stroke of the Return key on a
terminal.
|
Ctrl/X
|
The symbol Ctrl/X, where the letter X represents a terminal control
character, is generated by holding down the Ctrl key while pressing the
key of the specified terminal character.
|
switch
statement
fprintf
function
auto
storage class
|
In syntax definitions, items appearing in monospaced type identify
language keywords and the names of
OpenVMS and Compaq C Run-Time Library functions.
|
arg1
|
Italic type indicates a placeholder, such as an argument or parameter
name, and the introduction of new terms.
|
$
RUN CPROG
[Return]
|
Interactive examples show user input in boldface type.
|
float x;
.
.
.
x = 5;
|
A vertical ellipsis indicates that not all of the text of a program or
program output is illustrated. Only relevant material is shown in the
example.
|
option,...
|
A horizontal ellipsis indicates that additional parameters, options, or
values can be entered. A comma that precedes the ellipsis indicates
that successive items must be separated by commas.
|
[output-source,...]
|
Square brackets, in function synopses and a few other contexts,
indicate that a syntactic element is optional. Square brackets are not
optional, however, when used to delimit a directory name in an
OpenVMS file specification or when used to delimit the
dimensions of an array in Compaq C source code.
|
sc-specifier ::=
auto
static
[extern]
register
|
In syntax definitions, items appearing on separate lines are mutually
exclusive alternatives.
|
{a|b}
|
Braces surrounding two or more items separated by a vertical bar (|)
indicate a choice; you must choose one of the two syntactic elements.
|
<ucDelta symbol>
|
A delta symbol is used in some contexts to indicate a single ASCII
space character.
|
Platform Labels
A platform is a combination of operating system and hardware
that provides a distinct environment. This guide contains information
applicable to the OpenVMS operating system on both the
VAX and Alpha architectures.
The information in this guide applies to both of these platforms,
except when specifically labeled, as follows:
Label |
Explanation |
(ALPHA ONLY)
|
Specific to an
Alpha processor running the
OpenVMS operating system.
|
(VAX ONLY)
|
Specific to a
VAX processor running the
OpenVMS operating system.
|
New and Changed Features
Compaq C Version 6.5 for OpenVMS Alpha contains the following new
features and enhancements:
- This version uses the GEM BL48 back end, with best support for EV7
processors.
- The optional "
_nm
" suffix can be appended to any
#pragma
name to prevent macro expansion on that pragma. This is the opposite of
the "
_m
" suffix introduced in Compaq C Version 6.4 ( Section 5.4).
- Support is added for the C99
_Pragma
operator, which effectively allows
#pragma
directives to be produced by macro expansion. (See the Compaq C Language Reference Manual.)
- C99 constants for specific values of Infinity and NaN are supported
(only when using /FLOAT=IEEE and /IEEE={anything but FAST},
and compiled in any language mode except COMMON or VAXC). (See the
Compaq C Language Reference Manual.)
- C99 adjacent-string concatenation is supported. Wide and normal
strings can be mixed, in which case the normal strings get promoted to
wide, and a wide result is produced. (See the Compaq C Language Reference Manual.)
- C99 Universal Character Names (UCNs) are accepted in identifiers,
string literals, and character constants (and their wide variations).
(See the Compaq C Language Reference Manual.)
- New keywords NOCRTL and RESTORE_CRTL are added to the
#pragma extern_prefix
preprocessor directive. These keywords control whether or not the
compiler applies its default RTL prefixing to the names specified on
the pragma directive ( Section 5.4.6).
- The /ANNOTATIONS command-line qualifier is added ( Section 1.3.4).
- More aggressive /OPTIMIZE=INLINE=ALL ( Section 1.3.4).
Chapter 1 Developing Compaq C Programs
This chapter describes the following information about developing
Compaq C programs on an OpenVMS system:
1.1 DCL Commands for Program Development
This section provides a brief overview of the DCL commands used for
program development. The following sections provide more detailed
information about these topics.
Figure 1-1 shows the basic steps in Compaq C program development.
Figure 1-1 DCL Commands for Developing Programs
To create a Compaq C source program at DCL level, you must invoke a
text editor. In Figure 1-1, the EDIT command invokes the default
editor EDT to create the source program AVERAGE.C. You can
use another editor, such as the OpenVMS Text Processing
Utility (TPU) or the Compaq Language-Sensitive Editor (LSE).
(LSE is a product that must be
purchased separately; see Appendix C for more information.) A file
type of C is used to indicate that you are creating a Compaq C
source program. C is the conventional file type for all
Compaq C source programs.
When you compile your program with the CC command, you do not have to
specify the file type; by default, Compaq C searches for files with
a file type of C.
If your source program compiles successfully, the Compaq C compiler
creates an object file with the file type OBJ.
However, if the Compaq C compiler detects errors in your source
program, the system displays each error on your screen and then
displays the DCL prompt. You can then reinvoke your text editor to
correct each error.
You can specify command qualifiers on the CC command. Command
qualifiers cause the Compaq C compiler to perform additional
actions. In the following example, the /LIST qualifier causes the
Compaq C compiler to produce the listing file AVERAGE.LIS:
For a complete description of all CC command qualifiers, see
Section 1.3.4.
After your program has compiled successfully, invoke the
OpenVMS Linker to create an executable image file. For example:
The linker uses the object file produced by Compaq C as input to
produce an executable image file as output. (The executable image is a
file containing program code that can be run on the system.)
You can specify command qualifiers with the DCL command LINK. For a
complete list and explanation of all the command qualifiers available
with the LINK command, see Section 1.4.2.
After producing the executable image file, use the RUN command to
execute your program.
1.2 Creating a Compaq C Program
To create and modify a Compaq C program, you must invoke a text
editor. The OpenVMS system provides you with two text editors:
EDT and the OpenVMS Text Processing Utility (TPU). The
following section discusses TPU. See the OpenVMS EDT Reference Manual for more
information on EDT.
1.2.1 Using TPU
TPU is a high-performance, programmable utility. It provides two
editing interfaces: the Extensible VAX Editor (EVE), described
in the following section, and the TPU EDT Keypad Emulator. You can also
create your own interfaces.
Like EDT, TPU provides you with an online help facility that you can
access during your editing session. When you invoke TPU to create a
file, a journal file is automatically created. You can use this journal
file to recover your edits if the system fails during an editing
session. To recover your edits, enter the EVE/RECOVER command.
Unlike EDT, TPU provides multiple windows. This feature allows you to
view two files on your screen at the same time.
1.2.2 The EVE Interface to TPU
EVE is an interactive text editor that allows you to execute common
editing functions using the EVE keypad or to execute more advanced
functions by entering commands on the EVE command line. The following
command line invokes the EVE editor and creates the file
PROG_1.C:
You can define a global symbol for the EDIT/TPU command by placing a
symbol definition in your LOGIN.COM file. For example:
After this command line is executed, you can type EVE at the DCL prompt
followed by the name of the file you want to modify or create.
For more information on using EVE, see the Guide to VMS Text Processing.
1.3 Compiling a Compaq C Program
The Compaq C compiler performs the following functions:
- Detects errors in your source program
- Displays each error on your screen or writes the errors to a file
- Generates machine-language instructions from the source
statements
- Groups these machine-language instructions into an object module
for the linker
The following sections discuss the CC command and its qualifiers.
1.3.1 The CC Command
To invoke the Compaq C compiler, enter the CC command at the DCL
prompt ($). The CC command has the following format:
CC[/qualifier...][ file-spec [/qualifier...]],...
|
Note
(VAX ONLY)
This note applies to OpenVMS VAX systems that have both
Compaq C and VAX C installed.
The CC command is used to invoke either the VAX C or Compaq C
compiler. If the Compaq C installation procedure detects that your
system already has a VAX C compiler installed on it, the installer is
given the option to specify which compiler gets invoked by default
whenever the CC command verb is used. To invoke the compiler that is
not the default, use the CC command with the appropriate qualifier:
CC/DECC for the Compaq C compiler, or CC/VAXC for the VAX C
compiler. Where the CC command appears in examples in this manual,
CC/DECC is assumed to be the default.
|
/qualifier
An action to be performed by the compiler on all files or specific
files listed. When a qualifier appears directly after the CC command,
it affects all the files listed. When a qualifier appears after a file
specification, it affects only the file that immediately precedes it.
However, when files are concatenated, these rules do not apply.
file-spec
An input source file that contains the program or module to be
compiled. You are not required to specify a file type if you give your
file a .C file extension; the Compaq C compiler adopts
the default file type C.
You can include more than one file specification on the same command
line by separating the file specifications with either a comma (,) or a
plus sign (+). If you separate the file specifications with commas, you
can control which source files are affected by each qualifier. In the
following example, the Compaq C compiler creates an object file
for each source file but creates only a listing file for the source
files PROG_1 and PROG_3:
$ CC /LIST PROG_1, PROG_2/NOLIST, PROG_3
|
If you separate file specifications with plus signs, the Compaq C
compiler concatenates each of the specified source files and creates
one object file and one listing file. In the following example, only
one object file is created, PROG_1.OBJ, and only one listing file is
created, PROG_1.LIS. Both of these files are named after the first
source file in the list, but contain all three modules.
$ CC PROG_1 + PROG_2/LIST + PROG_3
|
Any qualifiers specified for a single file within a list of files
separated with plus signs affect all the files in the list. See the
description of the /PLUS_LIST_OPTIMIZE qualifier for its affect on file
concatenation.
Note
Concatenating source files without using the /PLUS_LIST_OPTIMIZE
qualifier (ALPHA ONLY) is not recommended because potential conflicts
in the name space of declared objects can result in compilation errors
or incorrect run-time behavior.
|
A more common use of plus-list concatenation is for specifying text
libraries. You can specify the name of a text library on the CC command
line to compile a source program. A text library is a file that
contains text organized into modules indexed by a table. Text libraries
have a .TLB default file extension. In the following example, text
libraries A.TLB and B.TLB are made available for searching for text
library modules during the compilation of source file TEST.C:
$ CC TEST.C + A.TLB/LIB + B.TLB/LIB
|
|