Macros are processed by the C/C++ preprocessor before the compilation is performed.
Inline functions are like normal functions, but the compiler will not generate a single block of code that is called each time the function is used. Instead, the compiler inserts the function code whenever the function is used.
An example:
#define DIV_BY_TWO(a) ((a) >> 1)
inline int DivByTwo(int a) { return a >> 1; }
int DivByFour(int a) { return a >> 2; }
int i = 8;
int j = 0;
j = DIV_BY_TWO(i);
j = DivByTwo(i);
j = DivByFour(i);