views:

811

answers:

3

Typically when writing new code you discover that you are missing a #include because the file doesn't compile. Simple enough, you add the required #include. But later you refactor the code somehow and now a couple of #include directives are no longer needed. How do I discover which ones are no longer needed?

Of course I can manually remove some or all #include lines and add them back until the file compiles again, but this isn't really feasible in a large project with thousands of files. Are there any tools available that will help automating task?

+3  A: 

You can use Lint to do that.

Unusually there isn't a free OS version of the tool available.

You can remove #includes by passing by reference instead of passing by value and forward declaring. This is because the compiler doesn't need to know the size of the object at compile time. This will require a large amount of manual work on your behalf however. The good thing is it will reduce your compile times.

graham.reeds
I couldn't find any lint documentation that said it could do this. Do you have a pointer?
staffan
Unfortunately, I too couldn't find it freely available. I have a PC-Lint license, and I can vouch that it's in there. Perhaps you should contact Gimpel directly? They may send you the excerpt from the manual.
JXG
+e766 // Include of header file FileName not used in module String
graham.reeds
A: 

You could just write a 'brute force' command line tool that comments out the #includes one by one and tests whether the compile still works. Let me know when you've got it to work. ;0)

Andy Brice
+2  A: 

This article explains a technique of #include removing by using the parsing of Doxygen. That's just a perl script, so it's quite easy to use.

Steve Gury
Unfortunately the links in the page no longer work.
graham.reeds