By giving a command line option, cproto will also convert function definitions in the specified files from the old style to the ANSI C style. The original source files along with files specified by
#include "file"
directives appearing in the source code will be overwritten with the converted code. If no file names are given on the command line, then the program reads the source code from the standard input and outputs the converted source to the standard output.
If any comments appear in the parameter declarations for a function definition, such as in the example,
main (argc, argv) int argc; /* number of arguments */ char *argv[]; /* arguments */ { ... }
then the converted function definition will have the form
int main ( int argc; /* number of arguments */ char *argv[]; /* arguments */ ) { ... }
Otherwise, the converted function definition will look like
int main (int argc, char *argv[]) { ... }
Cproto can optionally convert function definitions from the ANSI style to the old style. In this mode, the program also converts function declarators and prototypes that appear outside function bodies. This is not a complete ANSI C to old C conversion. The program does not change anything within function bodies.
main (argc, argv) int argc; char *argv[]; { ... }
If the value is 0, then no prototypes are generated. When set to 1, the output is:
int main(/*int argc, char *argv[]*/);
For a value of 2, the output has the form:
int main(int /*argc*/, char */*argv*/[]);
The default value is 3. It produces the full function prototype:
int main(int argc, char *argv[]);
A value of 4 produces prototypes guarded by a macro:
int main P_((int argc, char *argv[]));
-Ptemplate -Ftemplate -CtemplateSet the output format for generated prototypes, function definitions, and function definitions with parameter comments respectively. The format is specified by a template in the form
" int main ( a, b )"
but you may replace each space in this string with any number of whitespace characters. For example, the option
-F"int main(\n\ta,\n\tb\n\t)"
will produce
int main( int argc, char *argv[] )
The program does not pipe the source files through the C preprocessor when it is converting function definitions. Instead, it tries to handle preprocessor directives and macros itself and can be confused by tricky macro expansions. The conversion also discards some comments in the function definition head.
The -v option does not generate declarations for variables defined with the extern specifier. This doesn't strictly conform to the C language standard but this rule was implemented because include files commonly declare variables this way.
When the program encounters an error, it usually outputs the not very descriptive message "syntax error".
Options that take string arguments only interpret the following character escape sequences:
\n newline \t tab
Chin Huang cthuang@zerosan.UUCP chin.huang@canrem.com