c89 - Standard C Compiler
c89 [-c] [-D name [=value]]... [-E] [-g] [-I directory]... [-L direc-
tory]... [-o outfile] [-O] [-s] [-U name]... file...
Interfaces documented on this reference page conform to industry standards
c89: XPG4, XPG4-UNIX
Refer to the standards(5) reference page for more information about indus-
try standards and associated tags.
The following options are defined by the XPG4-UNIX standard. However, the
compiler can also recognize the options defined in cc(1). Unlike cc(1), c89
includes the -std1 option by default (for ANSI C standards checking). To
check for full compliance to XPG4-UNIX, you must also specify
-D_XOPEN_SOURCE_EXTENDED. See standards(5) for more information.
-c Suppress the loading phase of the compilation and force an object file
to be produced.
-g Produce symbol table information for full symbolic debugging and
suppress optimizations that limit full symbolic debugging. Symbol
types and stack-frame variables names are available. Global optimiza-
tions are not performed. Instruction scheduling does not span source
line boundaries. Trap instructions are inserted to ensure that excep-
tions are reported on the source lines that caused them to be gen-
-s Remove the symbol table and relocation bits to save space (this impairs
the usefulness of the debuggers). This information can also be removed
Name the final output file output. If this option is used, the file
a.out is undisturbed.
Define the name as if with a #define statement. If no definition is
given, the name is defined as 1.
-E Run only the C macro preprocessor on the files and send the result to
the standard output device.
Specifies that #include files whose names do not begin with / are
always sought first in the directory of the file argument, then in
directories specified in -I options, and finally in the standard direc-
Adds dir to the list of directories that are searched for libraries.
Directories specified with -L are searched before the standard direc-
-O Enable global optimization, including code motion, strength reduction
and test replacement, split lifetime analysis, and code scheduling.
Remove any definition of name previously defined with the -D option.
Compiles source code in conformance with the XPG4-UNIX standard.
The c89 command can process one or more of the following types of "file"
+ Files whose names end with .c are assumed to be C source programs.
They are compiled, and each object program is left in the file whose
name consists of the last component of the source with .o substituted
for .c. The .o file is deleted only when a single source program is
compiled and linked in a single step.
+ Files whose names end with .a are assumed to be libraries of object
files. These files are passed directly to the linker.
+ Files whose names end with .o are assumed to be object files produced
by a previous c89 command. These files are also passed directly to
The c89 command can take other types of file arguments, although they are
not part of the standard specification. See cc(1) for a description of the
other file types.
When the compiler is invoked, it defines the following C preprocessor mac-
ros that identify the language of the input files and the environments in
which the code can run:
You can reference these macros in #ifdef statements to isolate code that
applies to a particular language or environment.
The diagnostics produced by c89 are intended to be self-explanatory. Occa-
sional messages may be produced by the assembler or loader.
1. Compiles helloworld.c and produces the executable file helloworld.c
c89 -o helloworld helloworld.c
2. Compiles helloworld.c and creates the object file helloworld.o.
c89 -c helloworld.c
3. Compiles a.c and b.c, producing a.o and b.o. The object files main.o,
a.o, and b.o are then linked together, using the library /a/b/c/libQ.a
to resolve any references in a.o, and /a/b/c/libp.a to resolve any
references in b.o. The executable program is placed in the file
a.out. Only one -L option is needed because libQ.a and libp.a reside
in the same directory.
c89 -L /a/b/c main.o a.c -l Q b.c -l p
The following environment variables affect compiler operation:
Provides a default value for locale variables that are not set. If any
of these variables contains an invalid setting, the compiler behaves as
if none were set.
If set to a non-empty string, this variable overrides values in all
locale variables, including LANG.
Determines the locale for the interpretation of sequences of bytes of
text data as characters (for example, single-byte characters instead of
multi-byte characters in arguments and input files).
Determines the locale used for diagnostic messages.
Determines the locale of message catalogs for the processing of
Provides a pathname that overrides the default directory for temporary
files, if any.
For more information on these environment variables, see i18n_intro(5) and
Compiler error messages in English
Compiler configuration file (optional)
C front end
C macro preprocessor
DEC C compiler
Binary ucode and symbol table joiner
Binary ucode and symbol table splitter
Optional global ucode optimizer
Symbolic to binary assembly language translator
Binary assembly language assembler and reorganizer
Startup for profiling
Standard library, see intro(3)
Level 1 profiling library
Standard directory for #include files
Interface between prof and cord
Binary-to-symbolic ucode translator
Symbolic-to-binary ucode translator
File produced for analysis by prof
File produced for analysis by gprof
Commands: as(1), cc(1), ld(1)
Other: i18n_intro(5), l10n_intro(5), standards(5)
Guides: ANSI X3.159-1989
B. W. Kernighan and D. M. Ritchie, The C Programming Language
B. W. Kernighan, Programming in C -- a tutorial
D. M. Ritchie, C Reference Manual
Assembly Language Programmer's Guide
Compaq C Language Reference Manual