title: Where are NDEBUG and _DEBUG Defined in Visual Studio 2015?
body: <p>I can go to the settings of a default Visual Studio 2010 project and see <code>NDEBUG</code> or <code>_DEBUG</code> defined in "Configuration Properties">>"C/C++">>"Preprocessor"'s "Preprocessor Definitions":
  <a href="https://i.stack.imgur.com/SKu7V.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/SKu7V.png" alt="Visual Studio 2010 Project Settings"></a></p>
  
  <p>If I go to the settings of a default Visual Studio 2015 project "Preprocessor Definitions" is empty!
  <a href="https://i.stack.imgur.com/vJjmC.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/vJjmC.png" alt="Visual Studio 2015 Project Settings"></a></p>
  
  <p>I don't even see <code>NDEBUG</code> or <code>_DEBUG</code> mentioned at all in the Visual Studio 2015 .vcxproj. I know that it is correctly defined though because <code>assert(false)</code> only fires in the Debug configuration. Where has Microsoft tucked these definitions away in Visual Studio 2015? Is it possible for me to modify them, or has that been taken from me?</p>
  
  <p><strong>EDIT:</strong>
  <a href="https://stackoverflow.com/a/33154591/2642059">Niall's answer</a> is correct. What I didn't understand was that the <code>assert</code> happened differently if triggered in Release configuration. This program doesn't pop up an <code>assert</code> dialog, but it doesn't execute the <code>system("pause")</code> either:</p>
  
  <pre><code>void main() {
      assert(false);
      system("pause");
  }
  </code></pre>
  
  <p>Instead when I run it in Release configuration from Visual Studio I see the console window pop up and immediately close, so I <em>assumed</em> the <code>assert</code> didn't fire cause I didn't see an <code>assert</code> dialog. <em>However</em> if I run the compiled Release executable from the terminal it immediately ends, <em>but</em> it outputs:</p>
  
  <blockquote>
    <p>Assertion failed: false, file temp.cpp, line 9</p>
  </blockquote>
  
  <p>So the assertion <em>is</em> firing in Release configuration, it just doesn't pop up an <code>assert</code> dialog. This means that <code>NDEBUG</code> is in fact <em>not</em> being defined.</p>