title: Advantages of conditional-preprocessor over conditional statements
body: <p>I have never worked with  <strong>#if</strong>, <strong>#ifdef</strong>, <strong>#ifndef</strong>, <strong>#else</strong>, <strong>#elif</strong> and <strong>#endif</strong>. </p>
  
  <p>As I was going through some source-codes, I found an extensive use of these directives. 
  Did some reading on conditional-preprocessors but found no clue like <strong>how are they different from normal conditional statements</strong>. 
  So I was wondering what is the advantage of following code:</p>
  
  <pre><code>#include&lt;iostream&gt;
  int main()
  {
      int i = 0;
  
      #if i == 0
           std::cout&lt;&lt;"This";
      #else
           std::cout&lt;&lt;"That";
      #endif
      return 0;
  }
  </code></pre>
  
  <p>over this:</p>
  
  <pre><code>#include&lt;iostream&gt;
  int main()
  {
      int i = 0;
  
      if (i == 0)
           std::cout&lt;&lt;"This";
      else
           std::cout&lt;&lt;"That";
      return 0;
  }
  </code></pre>
  
  <p>Also, when <strong>to-use</strong>/not-to-use conditional-preprocessor? </p>