Extreme C
上QQ阅读APP看书,第一时间看更新

Summary

In this chapter, we covered the fundamental steps and components required to build a C project. Without knowing how to build a project, it is pointless to just write code. In this chapter:

  • We went through the C compilation pipeline and its various steps. We discussed each step and described the inputs and the outputs.
  • We defined the term platform and how different assemblers can lead to different machine-level instructions for the same C program.
  • We continued to discuss each step and the component driving that step in a greater detail.
  • As part of the compiler component, we explained what the compiler frontends and backends are, and how GCC and LLVM use this separation to support many languages.
  • As part of our discussion regarding the assembler component, we saw that object files are platform-dependent, and they should have an exact file format.
  • As part of the linker component, we discussed what a linker does and how it uses symbols to find the missing definitions in order to put them together and form the final product. We also explained various possible products of a C project. We explained why relocatable (or intermediate) object files should not be considered as products.
  • We demonstrated how the linker can be fooled when a symbol is provided with a wrong definition. We showed this in example 2.5.
  • We explained the C++ name mangling feature and how problems like what we saw in example 2.5 can be prevented because of that.

We will continue our discussion regarding object files and their internal structure in the next chapter, Object Files.