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 preprocessor. It is intended to be suitable for historical Unix uses
  of the preprocessor, such as
  imake(1), particularly those that
  depend on preservation 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 not injected.
tradcpp has many options, many of which are defined for
  compatibility with gcc(1) or other
  compilers. Many of the options are not yet implemented.
  - -C
- Retain comments in output.
- -Dmacro[=expansion]
- Provide a definition for the named macro. If no expansion is provided, the
      value “1” is used. Note that like many Unix compilers,
      tradcppdoes not accept a space between the
      “D” and the macro name.
- -Ipath
- Add the specified path to the main list of include directories. Note that
      like many Unix compilers, tradcppdoes 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, tradcppdoes 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-alldisables
      only the warnings that are disabled by default.
- -w
- Turn off all warnings.
- -Werror
- Make warnings into fatal errors.
- Warn about nested comments.
- -Wno-endif-labels
- 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 expressions.
- -Wunused-macros
- Warn about macros that are defined and never used. Not implemented.
  - -M
- Generate dependency information for
      make(1) on the standard
      output, instead of preprocessing. Not implemented.
- -MD
- Like -Mbut skip system headers. Not
    implemented.
- -MM
- Like -Mbut 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 -MMbut skip system headers. Not
    implemented.
- -MFfile
- 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 implemented.
- -MQtarget
- Same as -MTexcept that any
      make(1) metacharacters
      appearing in the target are escaped.
- -MTtarget
- Set the name of the make(1)
      target appearing in the generated dependency information. The default is
      the name of the input file with its suffix replaced with the suffix for
      object files, normally .o.
  - -idirafterpath
- Add the specified path to the “afterwards” include path.
      This path is searched after all directories specified with
      -Iand the standard system directories.
      Directories on this path are treated as containing system include
    files.
- -imacrosfile
- Read in file prior to reading the main input file,
      and preprocess it, but throw away the output and retain only the macro
      definitions.
- -includefile
- Read in and preprocess file prior to reading the
      main input file.
- -iprefixprefix
- Set the path prefix used with the -iwithprefixoption.
- -iquotepath
- 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.
- -iremapstring:replacement
- Substitute replacement for
      string in the __FILE__built-in macro. Not supported.
- -isysrootpath
- Use path as the “system root”, that
      is, the directory under which the standard system paths are found.
- -isystempath
- 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.
- -iwithprefixdir
- Splice dir onto the prefix given with
      -iprefixand add this directory as if it were
      specified with-idirafter.
- -iwithprefixbefore
- Like -iwithprefixbut adds the result as if it
      were specified with-I.
  - -debuglogfile
- Write a trace of actions and operations to file as
      the input is processed. Meant for debugging problems in complex
      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 implemented.
- -dI
- Dump all include directives along with the normal preprocessing output.
      Not implemented.
- -dM
- Dump all macro definitions instead of the normal preprocessing output. Not
      implemented.
- -dN
- Like -dDbut emits only macro names and not the
      expansions. Not implemented.
- -H
- Output a trace of the include tree as it gets processed. Not
    implemented.
  - -CC
- Retain comments in output. Same as -C, accepted
      for compatibility with
    gcc(1).
- -fdollars-in-identifiers,- -fno-dollars-in-identifiers
- Enable (or disable, respectively) the use of the dollar sign in
      identifiers. Not implemented.
- -ftabstop=num
- Set the tab width to the specified value, for reporting column positions
      in diagnostics. The default is 8. Not implemented.
- -std=standard
- Ask tradcppto 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 ignored.
- -xlang
- 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
      tradcpp.
The default list of directories searched for include files is:
  - /usr/local/include
- /usr/include
None. The whole point of a traditional cpp is that it reflects practices in
  pre-standardization implementations of C. Some information is available 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 oftradcpp was written one evening
  in late 2010. This version had some problems and was put aside. The first
  working version was released in June 2013.