ChatGPT解决这个技术问题 Extra ChatGPT

What is the meaning of lines starting with a hash sign and number like '# 1 "a.c"' in the gcc preprocessor output?

I print out the output of C preprocessor by using

gcc -E a.c

The output contains many lines like

# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "a.c"
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 1 3
# 19 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 3
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 1 3
# 31 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
       
# 32 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
# 20 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 2 3

I've never seen this kind of syntax in C. Can someone explain what this is doing?

How to get rid of them: stackoverflow.com/questions/2946898/…

j
jdehaan

These lines are hints for debugging (where the code following the line actually came from)

# line-number "source-file" [flags]

Meaning of flags (space separated):

1 - Start of a new file

2 - Returning to previous file

3 - Following text comes from a system header file (#include <> vs #include "")

4 - Following text should be treated as being wrapped in an implicit extern "C" block.


Official documentation is here: gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html
u
uvsmtid

These linemarkers are mentioned in man gcc for -P option.

The -P option is specifically meant to get rid of these lines for clarity:

gcc -E -P source.c

See detailed documentation (answered before).


g
geekosaur

Those are line synchronization directives, which allow gcc to give correct error messages for errors in #included files. Other preprocessors (such as yacc/bison) use the same mechanism to relate C errors to the correct lines in the input .y file.


No, other C code generators like bison should emit #line preprocessor directives....

关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now