title: Does a compiler always produce an assembly code?
body: <p>From <strong>Thinking in C++ - Vol 1</strong>:</p>
  
  <blockquote>
    <p>In the second pass, the code generator walks through the parse tree
    and generates either assembly language code <strong><em>or</em></strong> machine code for the
    nodes of the tree.</p>
  </blockquote>
  
  <p>Well at least in GCC if we give the option of generating the assembly code, the compiler obeys by creating a file containing assembly code. <strong><em>But, when we simply run the command <code>gcc</code> without any options does it not produce the assembly code internally?</em></strong></p>
  
  <p>If yes, then why does it <strong><em>need</em></strong> to first produce an assembly code <strong><em>and then</em></strong> translate it to machine language?</p>