Before compilation, the preprocessor replaces macros with the code they expand to. The resulting code may be invalid when a function-like macro is
invoked without all its arguments, which can cause the program to fail to compile or to behave unexpectedly at runtime.