FreeBSD Manual Pages
CPROTO(1) User commands CPROTO(1) NAME cproto - generate C function prototypes and convert function definitions SYNOPSIS cproto [ option ... ] [ file ... ] DESCRIPTION Extracting 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 declara- tions for variables defined in the files. If no file argument is given, cproto reads its input from the standard input. Converting ANSI C Cproto can convert function definitions in simple source files from the old style to the ANSI C style (see BUGS for limitations). The original source files along with files specified by #include "file" directives appearing in the source code will be overwritten with the con- verted code. If no file names are given on the command line, then the pro- gram reads the source code from the standard input and outputs the con- verted source to the standard output. If any comments appear in the parameter declarations for a function defini- tion, 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[]) { } Converting K&R C Cproto can convert function definitions from the ANSI style to the old K&R 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. Lint-libraries Cproto can optionally generate source in lint-library format. This is use- ful in environments where the lint utility is used to supplement prototype checking of your program. OPTIONS -a Convert function definitions from the old style to the ANSI C style. -B directive Set the conditional compilation directive to output at the beginning of function definitions generated by the -b option. The default is #ifdef ANSI_FUNC -b Rewrite function definition heads to include both old style and new style declarations separated by a conditional compilation directive. For example, the program can generate this function definition: #ifdef ANSI_FUNC int main (int argc, char *argv[]) #else int main (argc, argv) int argc; char *argv[] #endif { } -C template Set the output format for function definitions with parameter com- ments. The -F and -P options allow setting the format for proto- types and function definitions. The format is specified by a template in the form " int f ( a, b )" but you may replace each space in this string with any number of whitespace characters. For example, the option -F"int f(\n\ta,\n\tb\n\t)" will produce int main( int argc, char *argv[] ) -c The parameter comments in the prototypes generated by the -f1 and -f2 options are omitted by default. Use this option to enable the output of these comments. -D name[=value] This option is passed through to the preprocessor and is used to de- fine symbols for use with conditionals such as #ifdef. -d Omit the definition of the prototype macro used by the -m option. -E cpp Pipe the input files through the specified C preprocessor command when generating prototypes. By default, the program uses "cpp" via a pipe. -E 0 Do not run the C preprocessor. -e Output the keyword extern in front of every generated prototype or declaration that has global scope. -F template Set the output format for function definitions as in the "-C" op- tion. -f n Set the style of generated function prototypes where n is a number from 0 to 3. For example, consider the function definition 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[]); -I directory This option is passed through to the preprocessor and is used to specify a directory to search for files that are referenced with #include. -i By default, cproto only generates declarations for functions and variables having global scope. This option will output inline dec- larations as well. -l Generate text for a lint-library (overrides the "-f" option). The output includes the comment /* LINTLIBRARY */ Special comments LINT_EXTERN and LINT_PREPRO (a la "VARARGS") re- spectively turn on the "-x" option and copy comment-text to the out- put (for preprocessing in lint). Use the comment /* LINT_EXTERN2 */ to include externs defined in the first level of include-files. Use the comment /* LINT_SHADOWED */ to cause cproto to put "#undef" directives before each lint library declaration (i.e., to avoid conflicts with macros that happen to have to have the same name as the functions, thus causing syntax er- rors). Note that these special comments are not supported under VAX/VMS, since there is no equivalent for the "-C" option of the C preproces- sor with VAX-C. -M name Set the name of the macro used to surround prototype parameter lists when option -m is selected. The default is "P_". -m Put a macro around the parameter list of every generated prototype. For example: int main P_((int argc, char *argv[])); -N name Rather than filling in "void" for functions without parameters, use the given name. -n Rather than filling in "void" for functions without parameters, use a comment "/*empty*/". -O file Specify the name of the error file (default: standard error). -o file Specify the name of the output file (default: standard output). -P template Set the output format for generated prototypes as in the "-C" op- tion. -p Disable promotion of formal parameters in old style function defini- tions. By default, parameters of type char or short in old style function definitions are promoted to type int in the function proto- type or converted ANSI C function definition. Parameters of type float get promoted to double as well. -q Do not output any error messages when the program cannot read the file specified in an #include directive. -S Output only static declarations. -s By default, cproto only generates declarations for functions and variables having global scope. This option will output static dec- larations as well. -T Copy type definitions from each file. (Definitions in in- cluded-files are copied, unlike the "-l" option). -t Convert function definitions from the ANSI C style to the tradi- tional style. -U name This option is passed through to the preprocessor and is used to re- move any definitions of this symbol. -V Print version information. -v Also output declarations for variables defined in the source. -X level This option limits the include-file level from which declarations are extracted by examining the preprocessor output. -x This option causes procedures and variables which are declared "ex- tern" to be included in the output. ENVIRONMENT 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. BUGS If an un-tagged struct, union or enum declaration appears in a generated function prototype or converted function definition, the content of the de- claration between the braces is empty. The program does not pipe the source files through the C preprocessor when it is converting function definitions (i.e., options -a, -b, -t). That is because cproto does the conversion by replacing strings, rather than by converting to/from lexical tokens. Instead of using the C preprocessor, cproto tries to handle preprocessor directives and macros itself, to find type definitions. There are several limitations as a result: * the search-path for included files contains only "/usr/include" and the directories listed by "-I" options. * conditional directives (e.g., "#if") are ignored. * only macros without parameters are handled. * some comments in the function definition head are discarded. The -v option does not generate declarations for variables defined with the extern specifier. This does not strictly conform to the C language stan- dard 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 de- scriptive message "syntax error". (Your configuration may allow the ex- tended 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 are not passed through on systems whose C preprocessors do not support this (e.g., VAX/VMS, MS-DOS). AUTHORS 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. SEE ALSO cc(1), cpp(1) Version 4.8 2026-05-12 CPROTO(1)
NAME | SYNOPSIS | DESCRIPTION | OPTIONS | ENVIRONMENT | BUGS | AUTHORS | SEE ALSO
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=cproto&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>
