CPROTO(1) | USER COMMANDS | CPROTO(1) |
cproto - generate C function prototypes and convert function definitions
cproto [ option ... ] [ file ... ]
Cproto generates function prototypes for functions defined in the specified C source files to the standard output. The function definitions may be in the old style or ANSI C style. Optionally, cproto also outputs declarations for variables defined in the files. If no file argument is given, cproto reads its input from the standard input.
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.
Cproto can optionally generate source in lint-library format. This is useful in environments where the lint utility is used to supplement prototype checking of your program.
main (argc, argv) int argc; char *argv[]; { }
int main(/*int argc, char *argv[]*/);
int main(int /*argc*/, char */*argv*/[]);
int main(int argc, char *argv[]);
/* LINTLIBRARY */
/* LINT_EXTERN2 */
/* LINT_SHADOWED */
int main P_((int argc, char *argv[]));
#ifdef ANSI_FUNC int main (int argc, char *argv[]) #else int main (argc, argv) int argc; char *argv[] #endif { }
#ifdef ANSI_FUNC
-P template -F template -C template
Set 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 f ( a, b )"
-F"int f(\n\ta,\n\tb\n\t)"
int main(
int argc,
char *argv[]
)
The environment variable CPROTO is scanned for a list of options in the same format as the command line options. Options given on the command line override any corresponding environment option.
If an un-tagged struct, union or enum declaration appears in a generated function prototype or converted function definition, the content of the declaration between the braces is empty.
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”. (Your configuration may allow the extended error reporting in yyerror.c).
Options that take string arguments only interpret the following character escape sequences:
\n newline \s space \t tab
VARARGS comments don't get passed through on systems whose C preprocessors don't support this (e.g., VAX/VMS, MS-DOS).
Chin Huang cthuang@vex.net cthuang@interlog.com Thomas E. Dickey dickey@invisible-island.net modifications to support lint library, type-copying, and port to VAX/VMS.
2023-02-05 | Version 4.7v |