.hpp, .h, etc. is a loose convention for C++ header files, .hpp is a loose convention for C++ template implementation, and .h is pretty strong convention for c files.
You can use .hh and .cc on UNIX and Linux programmers, different from .cpp and .h. files.hhfiles can helps emacs distinguish between C and C++ syntax highlighting. .cc extension looks good together with .hh, and it's shorter than .cpp.
.hpp .h to differentiate between the two languages when building mixed-language products. For example, a class definition might go in an .hpp (implementation in .cpp), whereas a .h file would define only functions supported by C. To do this separation it is important to know the difference between the languages - to this end I pass *.c through gcc and *.cpp through g++.