Use C++ header file extensions, fix and disambiguate include guards