My entire autocompletion configuration (using auto-complete.el to provide completion with intellisense-style pull-down menus that vanish at convenient times: tweaked locally, may be full of horrible typos):
(I use GNU GLOBAL as a better tagging system and to help CEDET identify headers and associated things in projects rapidly: if I haven't run gtags, it'll use the locate database instead, and if even that isn't enough it'll fall back to find(1). There are other possibilities too.)
That's enough global setup for C and C++ code to work, and almost all of it is unnecessary -- the system will sort of work with nothing but (semantic-mode 1). But you want some local per-project setup too, so it knows where your headers are and what #defines to apply when parsing them and stuff like that. Projects using Autoconf and Automake, and a few major projects such as the Linux kernel, are automatically detected, but for others you might need something like this for each project:
Here, the :file is the name of some file whose presence indicates that this project exists, :include-path is the include path for project-local headers to search for (initial / indicates "relative to project root directory"), :system-include-path is the include path for stuff coming from other projects and systemwide (often just "/usr/include"), and :spp-table is a bunch of #defines you want set. (There are lots of other ways of adding projects, and defining your own is not very hard: see /usr/share/emacs/*/lisp/cedet/ede/proj-*.el.gz.)