How to convert a K&R function declaration to an AN

2020-02-07 04:07发布

// 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 K&R style, the types of variables are declared in new lines instead of in the braces. How to convert a K&R function declaration to an ANSI function declaration automatically? Does anybody know such an easy-to-use tool in Linux?

3条回答
2楼-- · 2020-02-07 04:29

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.

查看更多
劳资没心,怎么记你
3楼-- · 2020-02-07 04:30

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

查看更多
Lonely孤独者°
4楼-- · 2020-02-07 04:38

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.

查看更多
登录 后发表回答