One reason is until C99, the inline keyword was not standard in the C language. Thus macros allowed you to inline small functions. They also in some ways work like templates, ie. you don't have to specify types in the macro definition eg:
#define MAX(x,y) ((x) > (y) ? (x) : (y))
This macro is complient with integers, doubles, floats etc.