Conan
Conan

Reputation: 601

What do the numbers mean in the preprocessed .i files when compiling C with gcc?

I am trying to understand the compiling process. We can see the preprocessor intermediate file by using:

gcc -E hello.c -o hello.i

or

cpp hello.c > hello.i

I roughly know what the preprocessor does, but I have difficulties understanding the numbers in some of the lines. For example:

 # 1 "/usr/include/stdc-predef.h" 1 3 4
 # 1 "<command-line>" 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

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?

Upvotes: 33

Views: 3495

Answers (1)

dbush
dbush

Reputation: 224082

The numbers following the filename are flags:

1: This indicates the start of a new file.

2: This indicates returning to a file (after having included another file).

3: This indicates that the following text comes from a system header file, so certain warnings should be suppressed.

4: This indicates that the following text should be treated as being wrapped in an implicit extern "C" block.

Source: https://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html

Upvotes: 21

Related Questions