#define is not type safe
#define's replaces any code that follows that in the main program where ever they are referred to.So more the code you place after #define more the compile time.
Errors that arise during compilation due to syntax,semantics,type mismatch,etc.For example
//no closing braces
Errors that arise at runtime.eg.stack overflow errors,errors due to insufficient memory,opening a file that does not exist,etc.