How to convert a K&R function declaration to an ANSI function declaration automatically?

前端 未结 3 1808
既然无缘
既然无缘 2020-12-11 23:00
// K&R syntax
int foo(a, p) 
int a; 
char *p; 
{ 
    return 0; 
}

// ANSI syntax
int foo(int a, char *p) 
{ 
    return 0; 
}

As you see, in

相关标签:
3条回答
  • 2020-12-11 23:54

    Since You wanna convert a multiline string, you chould consider perl

    you have

    void old_style( c , a ) char c; int a; { /* some multiline code */ }
    

    and must have

    void old_style( char c, int a) {}
    

    So

    perl -i.bkp -nle 's/\((void|int|char|float|long) [a-zA-Z0-9_-]*\)([a-zA-Z0-9_-] ?,[a-zA-Z0-9_-] ?)\(.*{\)/\1(\2)/g'
    

    or something like it, would do the trick.

    It would be easier to tackle down the correct regex to this if you try it out and post in comments the output of

    diff file.c file.c.bkp
    

    for each of your source files.

    0 讨论(0)
  • 2020-12-11 23:58

    You can use cproto or protoize (part of GCC) to generate function prototypes or convert old style (K&R) functions to ANSI format.

    0 讨论(0)
  • 2020-12-12 00:00

    1) if you want to create standard C prototypes for a .h file use mkproto.c

    mkproto thisoldfile.c > thisoldfile.h

    You then could also paste over the old K&R code in the C file definition if desired.

    0 讨论(0)
提交回复
热议问题