1) No.
2) A Macro in C is simply text that is expanded before the compiler processes the source code. The inline keyword is used as a hint to the compiler that the function can be placed inline without the need for a call-stack to be set up.
So, for example, lets say that you got the following two snippets of code (First the macro and then the inline function):
#define MAX(x,y) (x > y ? x : y)
and
inline int max(int x, int y) { return x > y ? x : y; }
When the preprocessor finds the following call in your code:
int highest = MAX (var_1, var_2);
it replaces it with
int highest = (var_1 > var_2 ? var_1 : var_2);
The above is what the compiler eventually gets during the compilation process, hence the snippet defined by MAX(x,y) is the replacement for MAX(var_1, var_2). When the compiler finds the function call
int highest = max (var_1, var_2);
Then the function "max" gets called. You must assume that it gets called the normal way, because the compiler is free to ignore your "inline" hint and make calls to the function go through the normal call-stack rather than simply placing the code for the function in the place it is encountered.
One last caveat with macros: because it is all text replacement and not code replacement, if you do something like this:
int highest = MAX (v1++, v2++);
the preprocessor will expand that to:
int highest = (v1++ > v2++ ? v1++ : v2++);
which is probably not what you intended.