ansi2knr − convert ANSI C to Kernighan & Ritchie C

ansi2knr [‐‐filename filename] [input_file [output_file]]

‐‐filename provides the file name for the #line directive in
the output, overriding input_file (if present).

If no input_file is supplied, input is read from stdin.

If no output_file is supplied, output goes to stdout.

There are no error messages.

ansi2knr recognizes function definitions by seeing a non‐
keyword identifier at the left margin, followed by a left
parenthesis, with a right parenthesis as the last character
on the line, and with a left brace as the first token on the
following line (ignoring possible intervening comments).  It
will recognize a multi‐line header provided that no
intervening line ends with a left or right brace or a
semicolon.  These algorithms ignore whitespace and comments,
except that the function name must be the first thing on the

ansi2knr also recognizes adjacent string literals and
concatenates them.

The following constructs will confuse it:
     ‐ Any other construct that starts at the left margin
and follows the above syntax (such as a macro or function
     ‐ Some macros that tinker with the syntax of the
function header.
     ‐ String literals whose concatenation requires
rewriting their contents; e.g. "ab " "07c" is concatenated
to "ab 07c", which is not correct.

The ‐‐varargs switch is obsolete, and is recognized only for
backwards compatibility.  The present version of ansi2knr
will always attempt to convert a ... argument to va_alist
and va_dcl.

L. Peter Deutsch <> wrote the original
ansi2knr and continues to maintain the current version; most
of the code in the current version is his work.  ansi2knr
also includes contributions by Francois Pinard
<>, Jim Avera <>, and
Paul Eggert <>.