Macros are not functions.
Macros do TEXT replacement. So when you have
#define foo1( a ) (a * a)
any instance of foo1( ... ) with anything between then parenthesis will be expanded AS TEXT, not as an expression. So when you have foo1( 1 + 2 ) it turns into ( 1 + 2 * 1 + 2 )