I tend to use etags.
For emacs integration:
http://www.gnu.org/software/emacs/emacs-lisp-intro/html_node/etags.html
For how to run etags.
http://www.delorie.com/gnu/docs/emacs/etags.1.html
As a bonus, this blog post describes a bit more emacs setup and how to use etags.
http://tulrich.com/geekstuff/emacs.html
Edit:
To answer the comment, after runnning etags across your code, you can complete words with C-x t(that's what it's bound to on my machine.) Or you can call the tag-search method.