A colleague of mine spent a fair bit of time using grep to track down some functions in a very large body of source code. His greps were turning up a blank, and after some time discovered the functions were generated by macros at compile time.
Its fun to think that this could have been solved a little quicker if he had grep’d the output of the preprocessor.
gcc -E source_file.c | grep -B3 -A3 "thing to search for"