difference between #if and if ?

Anything that begins with a # is a compiler instruction. In this example, you are telling the compiler, if this mode is defined, then include this portion of the code. If not, then it's just like you deleted it before you compiled. These #if's are worked out before the program is loaded onto the board.

The if without the # is the regular if that works in the program. Those commands are figured out at run time on the board.