ANSI C lint type tool wanted
Arnold Robbins
arnold at audiofax.com
Wed Aug 1 01:56:01 AEST 1990
In article <6568 at tekcrl.LABS.TEK.COM> markh at tekcrl.LABS.TEK.COM (Mark C Henderson) writes:
>We are looking for an ANSI C lint.
>
>gcc -Wall won't do what we want. In particular it doesn't cover what
>is covered by pass 2 in SUN OS lint, i.e. checking the consistency of
>declarations across files.
>
>Is their a way to coax gcc into doing this?
Having gone through this recently... the following steps will go a long
way towards what you want. First though, our functions are all
declared like so:
int
name(int p1, float p2 /* and so on */)
{
code here
}
This one line awk script will remove all function bodies from your code.
cat *.c | awk '/^{/,/^}/ { next } ; /./' > protos.h
Leaving you all the global declarations. Edit these into a header file
of prototypes and externs that every .c file includes. Next,
# create files with lists of function names
for i in *.c
do grep '^[A-Za-z0-9_][A-Za-z0-9_]*(' $i | sed 's/(.*//' > $i.i
done
# count the number of files each identifier appears in
for i in *.i
do for j in `cat $i`
do
k=`grep -l $j *.c | wc -l`
if [ $k = 1 ]
then echo $j in $i could be static
fi
done
done
This gives you a list of routines that could be made static. Make the
appropriate changes in your source files and the header with all the
prototypes. Recompile with gcc -Wall and remove any other problems.
This does not duplicate lint's full functionality, but it certainly
helps. I too miss having an ANSI lint.
--
Arnold Robbins AudioFAX, Inc. | Laundry increases
2000 Powers Ferry Road, #220 / Marietta, GA. 30067 | exponentially in the
INTERNET: arnold at audiofax.com Phone: +1 404 933 7600 | number of children.
UUCP: emory!audfax!arnold Fax: +1 404 933 7606 | -- Miriam Robbins
More information about the Comp.lang.c
mailing list