- NetBSD Manual Pages
TRADCPP(1) NetBSD General Commands Manual TRADCPP(1)
Powered by man-cgi (2021-06-01).
Maintained for NetBSD
by Kimmo Suominen.
Based on man-cgi by Panagiotis Christias.
tradcpp -- traditional (K&R-style) C macro preprocessor
tradcpp [-options] [input-file [output-file]]
The tradcpp command provides a traditional K&R-style C macro preproces-
sor. It is intended to be suitable for historical Unix uses of the pre-
processor, such as imake(1), particularly those that depend on preserva-
tion of whitespace.
The chief ways in which traditional cpp differs from Standard C are:
· Macro arguments are expanded within quoted strings. There is
no stringize operator.
· There is no token pasting operator; tokens can be concatenated
by placing comments between them. This process is also not
limited to valid C language tokens.
· Whitespace is preserved, and in particular tabs are not
expanded into spaces. Furthermore, additional whitespace is
tradcpp has many options, many of which are defined for compatibility
with gcc(1) or other compilers. Many of the options are not yet imple-
-C Retain comments in output.
Provide a definition for the named macro. If no expansion
is provided, the value ``1'' is used. Note that like many
Unix compilers, tradcpp does not accept a space between the
``D'' and the macro name.
-Ipath Add the specified path to the main list of include directo-
ries. Note that like many Unix compilers, tradcpp does not
accept a space between the ``I'' and the directory name.
-nostdinc Do not search the standard system include directories.
-P Suppress line number information in the output. Currently
line number information is not generated at all and this
option has no effect.
-Umacro Remove any existing definition for the named macro. Note
that like many Unix compilers, tradcpp does not accept a
space between the ``U'' and the macro name.
-undef Remove all predefined macros.
Warning options can be disabled or enabled by inserting, or not, the
string ``no-'' between the ``W'' and the warning name. Herein the
``-Wno-'' form is shown for options that are enabled by default.
-Wall Turn on all warnings. The option -Wno-all disables only
the warnings that are disabled by default.
-w Turn off all warnings.
-Werror Make warnings into fatal errors.
-Wcomment Warn about nested comments.
Don't warn about symbols attached to #endif directives.
(The warning is currently not implemented.)
-Wundef Warn about undefined symbols appearing in #if and #elif
Warn about macros that are defined and never used. Not
-M Generate dependency information for make(1) on the standard
output, instead of preprocessing. Not implemented.
-MD Like -M but skip system headers. Not implemented.
-MM Like -M but write the dependency information to a file
named after the input file with extension .d and preprocess
normally to standard output. Not implemented.
-MMD Like -MM but skip system headers. Not implemented.
-MF file Send dependency output to the named file instead of the
default location. Not implemented.
-MG When generating dependency information, assume that missing
files are generated instead of failing. Not implemented.
-MP Issue dummy rules for all include files. This prevents
make(1) from choking if an include file is removed. Not
-MQ target Same as -MT except that any make(1) metacharacters appear-
ing in the target are escaped.
-MT target Set the name of the make(1) target appearing in the gener-
ated dependency information. The default is the name of
the input file with its suffix replaced with the suffix for
object files, normally .o.
More Include Path Options
Add the specified path to the ``afterwards'' include path.
This path is searched after all directories specified with
-I and the standard system directories. Directories on
this path are treated as containing system include files.
Read in file prior to reading the main input file, and pre-
process it, but throw away the output and retain only the
Read in and preprocess file prior to reading the main input
Set the path prefix used with the -iwithprefix option.
-iquote path Add path to the list of directories searched for include
directives written with quotes. This list is not searched
for include directives written with angle brackets.
Substitute replacement for string in the __FILE__ built-in
macro. Not supported.
Use path as the ``system root'', that is, the directory
under which the standard system paths are found.
Add path to the list of system include directories. This
list is searched after the list given with I. Files found
on this path are treated as system headers.
Splice dir onto the prefix given with -iprefix and add this
directory as if it were specified with -idirafter.
Like -iwithprefix but adds the result as if it were speci-
fied with -I.
Write a trace of actions and operations to file as the
input is processed. Meant for debugging problems in com-
plex substitution schemes fed to tradcpp, such as those
used by imake(1).
-dD Dump all macro definitions, except for the predefined
macros, after the normal preprocessing output. Not imple-
-dI Dump all include directives along with the normal prepro-
cessing output. Not implemented.
-dM Dump all macro definitions instead of the normal prepro-
cessing output. Not implemented.
-dN Like -dD but emits only macro names and not the expansions.
-H Output a trace of the include tree as it gets processed.
-CC Retain comments in output. Same as -C, accepted for com-
patibility with gcc(1).
Enable (or disable, respectively) the use of the dollar
sign in identifiers. Not implemented.
Set the tab width to the specified value, for reporting
column positions in diagnostics. The default is 8. Not
Ask tradcpp to conform to the named standard. The default,
and the only supported value, is ``krc''.
-traditional This option is accepted for compatibility with gcc(1) and
-x lang Adjust the preprocessor for the given language. The only
values accepted for lang are ``assembler-with-cpp'' and
``c'', neither of which have any effect on the behavior of
The default list of directories searched for include files is:
cc(1), cpp(1), make(1)
None. The whole point of a traditional cpp is that it reflects practices
in pre-standardization implementations of C. Some information is avail-
able from the first edition of Kernighan and Ritchie. Much of the rest
of the behavior is based on lore, pragmatism, material encountered in the
wild, and comparison to other implementations.
The original version of tradcpp was written one evening in late 2010.
This version had some problems and was put aside. The first working ver-
sion was released in June 2013.
NetBSD 10.99 June 11, 2013 NetBSD 10.99