title: Turning off debugging, NDEBUG
body: <p>C++ Primer says that</p>
  
  <blockquote>
    <p>The behavior of assert depends on the status of a preprocessor variable named NDEBUG. We can "turn off" debugging by providing a <code>#define</code> to define
    <code>NDEBUG</code></p>
  </blockquote>
  
  <p>It is my expectation that when define is provided, asserts won't be executed.</p>
  
  <pre><code>#define NDEBUG TRUE
  
  int main (int argc, char const *argv[])
  {
      assert(argc==0);  // checked
  
      return 0;
  }
  </code></pre>
  
  <p>Why, in this example, is <code>assert</code> statement checked, when <code>NDEBUG</code> is defined? (Correct me if i am wrong, but it does not matter to what it is defined, right?)</p>
  
  <p>When executed from command line, using the <code>-DNDEBUG</code> flag, all works as expected (<code>assert</code> is not executed)</p>