Macros are nothing more than find-and-replace rules that are done before the compiler sees the code.
This is how some example usages would be replaced:
Now a more "interesting" case:
MM_TO_POINT(23) --> 2.83464567*23
x = MM_TO_POINT(y); --> x = 2.83464567*y;
(This is why macro "arguments" should always be in extra brackets.)
x = MM_TO_POINT(a + 5); --> x = 2.83464567*a + 5;
However, macro's are a very dumb tool. Why not use a (template) function to achieve the exact same result?