I never said #define was a part of C++, and it's not a part of C. It's a part of CPP.
http://countminus1.wordpress.com/2013/01/04/what-does-cpp-stand-for/
AFAIK, the behavior of cpp is defined entirely by the C standards. There is no separate standard for cpp. Thus, when it comes to determining what is correct behavior for cpp, the C standard rules. For example, the behavior for stringizing or string tokenizing, two behaviors that were completely absent from the original cpp, is defined entirely by the C standards.
So yes, cpp
is a part of C, in the sense that it's impossible to have a compliant C compiler if one lacks a compliant pre-processor.
And a separate pre-processor is not a requirement of any C standard. It's entirely possible to have a compiler that does pre-processing and compilation in a single integrated pass. It boils down to "acts as if", which is a behavioral definition, rather than dictating an implementation.
EDIT
It just occurred to me that sometimes people are confused by a file suffix, such as "foo.cpp".
http://en.wikipedia.org/wiki/.cpp
In olden days, a '+' could be problematic in certain contexts, such as being invalid in a filename (file-system dependent), or possibly in earlier versions of make or sccs. As a result, file-suffixes for building source files were exclusively alphanumeric characters, devoid of punctuation except the dot delimiting basename from suffix.
Before C++ existed, .cpp files were typically destined to be processed only by the 'cpp' command (which was a distinct command all the way back), generally as a phase before additional processing of some kind. For example, I distinctly remember working with both Fortran and Pascal compilers that lacked any macros, conditional compile, or include capability, for which 'cpp' was perfectly suited.
These days, default build rules are more likely to treat a .cpp file as C++, so specific rules in the makefile are needed.