执行C程序时会创建多少个文件?

执行C程序时会创建多少个文件?,c,C,当我们用C语言编程时,会创建多少个文件,比如一个“.exe”和一个“.obj”。是否创建了其他文件? 谢谢 这完全取决于特定的编译器以及如何构建程序。通常可以在一个步骤中编译源代码并将其直接链接到可执行文件 gcc test.c -o test 不会留下任何中间文件。这完全取决于特定的编译器以及如何构建程序。通常可以在一个步骤中编译源代码并将其直接链接到可执行文件 gcc test.c -o test 不会留下任何中间文件。答案在很大程度上取决于特定的编译器(gcc/msvc/clang)、

当我们用C语言编程时,会创建多少个文件,比如一个“.exe”和一个“.obj”。是否创建了其他文件?
谢谢

这完全取决于特定的编译器以及如何构建程序。通常可以在一个步骤中编译源代码并将其直接链接到可执行文件

gcc test.c -o test

不会留下任何中间文件。

这完全取决于特定的编译器以及如何构建程序。通常可以在一个步骤中编译源代码并将其直接链接到可执行文件

gcc test.c -o test

不会留下任何中间文件。

答案在很大程度上取决于特定的编译器(gcc/msvc/clang)、该编译器的版本、系统的体系结构,以及您是否要求编译器生成调试信息。正确的做法是,
gcc test.c-o test
将只创建一个文件,
test
。但是,这是因为
gcc
调用编译器和链接器,然后在返回之前删除临时文件和中间对象文件(.o)

在编译过程中,编译器通常会生成几个临时文件,然后删除这些文件以进行清理。常见的有:

  • C编译器首先通过预处理器运行代码,通常使用临时文件存储结果

  • 几乎所有现代编译器都将C语言简化为一种可以更好地优化的中间语言。这通常存储在临时文件中

  • gcc的旧版本(也可能是新版本)将生成汇编,然后使用
    gas
    (GNU汇编程序)进行汇编。此步骤是使用临时文件(扩展名为.S)完成的

  • 编译阶段的结果将生成一个或两个文件:

  • 包含已编译但未链接代码的对象文件(.o用于大多数Unice,.obj用于Windows)。此代码无法执行;它具有链接阶段必须满足的外部依赖项(系统库,可能还有其他库)

  • 如果用户请求调试信息(
    -g
    ,在gcc下),则根据架构和其他编译标志,编译器可能会生成包含调试中使用的符号信息的文件(或目录)。Mac OS X中的编译器生成包含调试信息的.dSYM目录。在Linux下,这通常嵌入到对象(.o)文件中

  • 最后,Mac、Unix和Windows都有一个链接阶段,它接受对象文件(.o和.obj)和任何必需的库(.a和.so(Linux下,.a、.dylib或Mac OS X下的框架,.lib或Windows下的.dll),并生成一个可执行文件。这是生成Windows下可执行(.exe)文件的阶段

    总之,在编译可执行文件时:

    • C编译器通常创建(然后删除)许多临时文件

    • C编译器生成一个或多个对象文件

    • 链接器生成可执行文件,还可以创建(和删除)临时文件

    • 一些C编译器(例如gcc)也作为编译器和链接器的前端驱动程序运行。在这种情况下,编译器可能会删除任何不需要的临时文件,例如编译阶段生成的目标文件


    答案在很大程度上取决于特定的编译器(gcc/msvc/clang)、该编译器的版本、系统的体系结构,以及您是否要求编译器生成调试信息。正确的做法是,
    gcc test.c-o test
    将只创建一个文件,
    test
    。但是,这是因为
    gcc
    调用编译器和链接器,然后在返回之前删除临时文件和中间对象文件(.o)

    在编译过程中,编译器通常会生成几个临时文件,然后删除这些文件以进行清理。常见的有:

  • C编译器首先通过预处理器运行代码,通常使用临时文件存储结果

  • 几乎所有现代编译器都将C语言简化为一种可以更好地优化的中间语言。这通常存储在临时文件中

  • gcc的旧版本(也可能是新版本)将生成汇编,然后使用
    gas
    (GNU汇编程序)进行汇编。此步骤是使用临时文件(扩展名为.S)完成的

  • 编译阶段的结果将生成一个或两个文件:

  • 包含已编译但未链接代码的对象文件(.o用于大多数Unice,.obj用于Windows)。此代码无法执行;它具有链接阶段必须满足的外部依赖项(系统库,可能还有其他库)

  • 如果用户请求调试信息(
    -g
    ,在gcc下),则根据架构和其他编译标志,编译器可能会生成包含调试中使用的符号信息的文件(或目录)。Mac OS X中的编译器生成包含调试信息的.dSYM目录。在Linux下,这通常嵌入到对象(.o)文件中

  • 最后,Mac、Unix和Windows都有一个链接阶段,它接受对象文件(.o和.obj)和任何必需的库(.a和.so(Linux下,.a、.dylib或Mac OS X下的框架,.lib或Windows下的.dll),并生成一个可执行文件。这是生成Windows下可执行(.exe)文件的阶段

    总之,在编译可执行文件时:

    • C编译器通常创建(然后删除)许多临时文件

    • C编译器生成一个或多个对象文件

    • 链接器生成可执行文件,还可以创建