.\" $OpenBSD: cpp.1,v 1.6 2008/08/17 18:40:13 ragge Exp $ ."\ .\" Copyright (c) 2007 Jeremy C. Reed .\" .\" Permission to use, copy, modify, and/or distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR AND CONTRIBUTORS DISCLAIM .\" ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED .\" WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL AUTHOR AND .\" CONTRIBUTORS BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL .\" DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR .\" PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS .\" ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF .\" THIS SOFTWARE. .\" .Dd September 17, 2007 .Dt CPP 1 .Os .Sh NAME .Nm cpp .Nd C preprocessor .Sh SYNOPSIS .Nm .\" TODO also document -Dvar and below without spaces? .Op Fl CdMtVv .Op Fl D Ar macro[=value] .Op Fl I Ar path .Op Fl i Ar file .Op Fl S Ar path .Op Fl U Ar macro .Op Ar infile | - .Op Ar outfile .Sh DESCRIPTION The .Nm utility is a macro preprocessor used by the .Xr pcc 1 compiler. It is used to include header files, expand macro definitions, and perform conditional compilation. .Pp The .Ar infile input file is optional. If not provided or the file name is .Qq - (dash), .Nm reads its initial file from standard input. The .Ar outfile output file is also optional. It writes by default to standard output. .Pp .\" TODO: document MAXARG 250 args to a macro, limited by char value .\" TODO: Include order: .\" For "..." files, first search "current" dir, then as <...> files. .\" For <...> files, first search -I directories, then system directories. .\" The options are as follows: .Bl -tag -width Ds .It Fl ? Show command line usage for .Nm . .It Fl C Do not discard comments. .It Fl D Ar macro[=value] Fake a definition at the beginning by using .Do #define .Ar macro=value Dc . If .Ar value is not set on command-line, then define it as 1. .\" TODO: show example .It Fl dM Print list of .Dq #define statements to standard output for all defined macros other than builtin macros (see below). The normal results of preprocessing are not output. .\" TODO this doesn't show predefined macros .\" other -d options are ignored .It Fl I Ar path Add .Ar path to the list of directories containing needed header files. This may be used to override system include directories (see .Fl S option). .Fl I may be specified multiple times. .It Fl i Ar file Include a file at the beginning by using .Do #include .Ar file Dc . .\" Note: I did not use the .In macro above .It Fl M Generate dependencies for .Xr make 1 . .\" TODO: explain and show example? .It Fl P Inhibit generation of line markers. This is sometimes useful when running the preprocessor on something other than C code. .It Fl S Ar path Add .Ar path to the list of system directories containing needed header files. The .Fl S option may be specified multiple times. Note: .Nm does not have a default include directory defined. .\" TODO: explain difference between -I and -S .\" The directories listed by -I are searched first? .It Fl t Traditional cpp syntax. Do not define the .Dv __TIME__ , .Dv __DATE__ , .Dv __STDC__ , and .Dv __STDC_VERSION__ macros. .\" .It Fl U Ar macro Undefine a macro at the beginning by using .Do #undef .Ar macro Dc . .It Fl V Verbose debugging output. .Fl V can be repeated for further details. .\" -V only available if cpp source built with CPP_DEBUG, which is the default. .It Fl v Display version. .El .Ss Builtin Macros A few macros are interpreted inside the .Nm cpp program: .Bl -diag .It __DATE__ Expands to the date in abbreviated month, day, and year format from .Xr ctime 3 in quotes. .\" TODO: is that ctime(3) format output change according to locale? .It __FILE__ Expands to the name of the current input file in quotes. When read from standard input, it expands to .Qq Aq stdin . .It __LINE__ Expands to the line number of the current line containing the macro. .It __STDC__ Expands to the constant 1. This means the compiler conforms to .St -isoC .Po also known as .Do C90 Dc Pc . .It __STDC_VERSION__ Expands to .Dq 199901L which indicates that .Nm supports .St -isoC-99 .Po commonly referred to as .Do C99 Dc Pc . .It __TIME__ Expands to the time in hour, minutes, and seconds from .Xr ctime 3 in quotes. .El .Pp Also see the .Fl t option. .Sh EXIT STATUS The .Nm utility exits with one of the following values: .Bl -tag -width Ds .It 0 Successfully finished. .It 1 An error occurred. .El .Sh SEE ALSO .Xr as 1 , .Xr ccom 1 , .Xr pcc 1 .\" .Sh HISTORY The .Nm command comes from the original Portable C Compiler by S. C. Johnson, written in the late 70's. The code originates from the V6 preprocessor with some additions from V7 cpp and ansi/c99 support. .Pp A lot of the PCC code was rewritten by Anders Magnusson. .Pp This product includes software developed or owned by Caldera International, Inc.