I'm insufficiently expert to really answer, but I'll try anyway: the SlickEdit preprocessor code analysis is not the full value analysis that the C/C++ preprocessor does, it's more like a parametrized textual substitution process. So while the full C/C++ preprocessor may perform a whole sequence of macro substitutions and syntactic parsing with the objective of evaluating a final value (e.g. "0") for any preprocessor code statement, the SlickEdit process is much more textually oriented, with the objective of determining what kinds of language token are in the text being edited and using that information for code display, coloring, parameter completion, etc., etc. (Obviously this requires substantial syntactic analysis, but I think it's more fragmentary than the full C/C++ preprocessor.)
And all of this analysis has to be done within the constraints of a responsive editor program performance.