There are quite a few
1. Macros are replaced at compile time and Inline functions at runtime.
2. Macros does not type checking where as inline functions can check for parameter data type
3. Inline function may not behave inline depending on its implementation body but such occurance is not possible in Macros
I am not 100% sure with point no 1 but I am sure that the time of replacement of both are different.