title: What do the numbers mean in the preprocessed .i files when compiling C with gcc?
body: <p>I am trying to understand the compiling process. We can see the preprocessor intermediate file by using:</p>
  
  <pre><code>gcc -E hello.c -o hello.i
  </code></pre>
  
  <p>or</p>
  
  <pre><code>cpp hello.c &gt; hello.i
  </code></pre>
  
  <p>I roughly know what the preprocessor does, but I have difficulties understanding the numbers in some of the lines. For example:</p>
  
  <pre><code> # 1 "/usr/include/stdc-predef.h" 1 3 4
   # 1 "&lt;command-line&gt;" 2
   # 1 "hello.c"
   # 1 "/usr/include/stdio.h" 1 3 4
   # 27 "/usr/include/stdio.h" 3 4
   # 1 "/usr/include/features.h" 1 3 4
   # 374 "/usr/include/features.h" 3 4
  </code></pre>
  
  <p>The numbers can help debugger to display the line numbers. So my guess for the first column is the line number for column #2 file. But what do the following numbers do?</p>