Gcc 编译期间,include和header在哪里?
我知道在预处理过程中,include和header将被复制到源文件中 我使用gcc编译文件 源文件(.c文件): 我的问题是:Gcc 编译期间,include和header在哪里?,gcc,compilation,Gcc,Compilation,我知道在预处理过程中,include和header将被复制到源文件中 我使用gcc编译文件 源文件(.c文件): 我的问题是: 在汇编文件中,源代码中添加的include stdio.h在哪里 在编译过程中,include和header的作用是什么?它们如何影响编译过程 提前谢谢 > P>头文件在C和C++中为编译器提供信息 它需要,以便解析您在其中创建的源文件 #包括它们。您可以将它们包含在源文件中 使编译器能够这样做。解析源代码 文件,以及所有#包括-ed头文件、编译器 能够生成能够 在可执
提前谢谢 > P>头文件在C和C++中为编译器提供信息 它需要,以便解析您在其中创建的源文件
#包括它们。您可以将它们包含在源文件中
使编译器能够这样做。解析源代码
文件,以及所有#包括-ed头文件、编译器
能够生成能够
在可执行文件中与其他文件链接在一起。那个链接
这是你的工作
这对所有人来说都是不必要的
使编译器能够分析源代码的信息
要以任何形式复制到对象文件中的文件。一旦
已达到解析的目的,绝大多数
它通常没有进一步的用途。食谱能让你做一道菜。什么时候
你已经做了这道菜,你不指望能在里面找到菜谱
如果生成并检查编译器生成的汇编代码
从某个输入源文件生成,您正在查看的是
对象文件的汇编语言翻译
编译器将从相同的输入生成。任何信息
是不必要的,并且在目标代码中不存在也是不必要的
并且在汇编代码中不存在
典型头文件中的许多信息定义,
在代码中,软件设施的编程接口,用于编写您自己的代码
将使用,但已在您自己的对象所在的某个外部库中编译
代码将需要与链接。此信息使
编译器生成的目标代码可以与之链接
以预期和正确的方式访问外部库
例如,在程序集列表中,可以看到程序正在初始化寄存器
要调用printf
,如您所知,这是一个标准的C函数,已实现
在程序将链接到的C运行时库中,
其接口由
中的函数声明指定,其中包括。
编译器只需验证设置printf
以这种方式调用符合printf
期望的调用过程
在C运行时库中。在对象代码中,printf
调用
完全按照您在部件中看到的方式进行设置,
一旦设置完成,就是浪费材料
你可能会从中得到进一步的启发
#include <stdio.h>
int main(){
printf("Hello World!!!");
return 0;
}
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "test.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 27 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 367 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
# 410 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 411 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
# 368 "/usr/include/features.h" 2 3 4
# 391 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4
# 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4
# 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4
# 392 "/usr/include/features.h" 2 3 4
# 28 "/usr/include/stdio.h" 2 3 4
.......
.file "test.c"
.section .rodata
.LC0:
.string "Hello World!!!"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $.LC0, %edi
movl $0, %eax
call printf
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609"
.section .note.GNU-stack,"",@progbits