Yes, from the language standard point of view, comments are processed (replaced with spaces) before the preprocessor begins doing its work.
In practical implementations, processing of comments can be done by the same code (e.g. the same executable) that handles preprocessor directives and carries out macro substitution, but the result must be the same: comments have no effect on preprocessor proper.
In older and/or non-standard code sometimes one might see some tricks that rely on non-standard behavior involving implementation-specific comments vs. preprocessor relationships, like, for example, creation of comments using preprocessor directives
#define CONCAT(a, b) a##b
#define BEGIN_COMMENT CONCAT(/, *)
#define END_COMMENT CONCAT(*, /)
BEGIN_COMMENT
This code is supposedly commented-out
END_COMMENT
or using comments for preprocessor-level concatenation (with C compilers that didn't support ##
operator in macro definitions)
#define OLD_CONCAT(a, b) a/**/b
None of such tricks are legal in standard C. None of them really work.