Switching between different macro values

In the code, I often see some Macros assigned the value 1 or 0. Switching between different macro values will give me different function definitions. Are these macros for the purpose of engine development use only? As a game coder, I tried to change a value, then the warning appears, which askes me whether to overwrite the engine file. So I wondered if I can change these macro values as I like. Take the macro DO_CHECK as an example. If DO_CHECK =1, check() macro will be defined as

 #define check() {
  if(!(expr)) { FDebug::LogAssertFailedMessage( #expr, __FILE__, __LINE__ );   _DebugBreakAndPromptForRemote();
  FDebug::AssertFailed( #expr, __FILE__, __LINE__ ); 
 CA_ASSUME(expr); }

 }

and if DO_CHECK=0, it will be like

 #define check()

In every project I opened, I never see check() defined in the second way. If we only want check() to be defined in the first way, then why should we even have a DO_CHECK macro? Just directly define check() would be OK. What makes us choose between different macro values?

Thanks,

wcl1993