c语言是如何编译成二进制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言是如何编译成二进制相关的知识,希望对你有一定的参考价值。

我是新手,我想知道C语言,这么复杂的语言怎样通过?????编译给计算机看的
为什么LINUX是用C语言编译,难道C语言就是二进制????
我跟本搞不懂

源代码会经过预编译--->编译---->汇编----->连接几个步骤最终生成可执行文件.
1.预编译,把源代码中的宏展开并把包含的文件的源代码插入程序的源代码中.
2.编译,把源代码编译成二进制的目标文件.但是此时目标文件还是不可执行的.
3.汇编,这一步主要是处理源代码中的汇编代码.
4.连接,把目标代码和二进制的库文件以及其它内容合并成最终的可执行文件.

参考技术A 计算机专业有门课程叫做《编译原理》,详细讲述了怎么把高级语言翻译成汇编语言活着机器能看懂的二进制代码。

简单的说,C语言是通过编译器翻译成二进制代码的(就像英译汉的软件把英文翻译成汉语一样。把高级语言翻译成机器语言过程很复杂,学了编译原理就懂了)。还有编译器可以用各种语言编写,C语言可以被用C语言写的编译器来编译。
参考技术B C语言 avr单片机c语言高级程序设计
是一种成功的系统描述语言,用C语言开发的UNIX操作系统就是一个成功的范例;同时C语言又是一种通用的程序设计语言,在国际上广泛流行。世界上很多著名的计算公司都成功的开发了不同版本的C语言,很多优秀的应用程序也都使用C语言开发的,它是一种很有发展前途的高级程序设计语言。 1. C是中级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。 2.C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 3.C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。 c语言
4. C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。 C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。 5.C语言文件由数据序列组成,可以构成二进制文件或文本文件 常用的C语言IDE(集成开发环境)有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++ ,Borland C++ Builder,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc 等等…… 对于一个初学者,Microsoft Visual C++是一个比较好的软件。界面友好,功能强大,调试也很方便。这是微软出的一个C语言集成开发环境(IDE),主要有:VC++6.0、VS2005、VS2008、VS2010等,分为企业版和学生版等。对于初学者VC++6.0是比较容易上手的,但由于其对标准支持的不好可能使人养成不良编程习惯,因此论坛上也有人主张舍弃VC++6.0。

你查下C语言asc码
参考技术C 用visual C++编译的程序,会自动生成一个二进制的给机器看的文件 参考技术D 你用tc追问

?我是用TC啊,然后

追答

编译以后有个 .obj 的文件,这个文件就是二进制代码的机器指令

本回答被提问者采纳

C语言——编译器如何将C源文件编译成可执行代码?

步骤:

  1. 预编译阶段。

    预处理器插入”#include”所包含的内容,删除注释,展开源文件中的宏,从而生成预编译文件。

  2. 编译阶段。

    编译器先将预编译文件转换为汇编源文件,再将汇编源文件转换为二进制文件。

  3. 链接阶段。

    链接器将编译生成的二进制文件、使用的库函数的二进制文件和启动代码的二进制文件链接在一起,生成可执行程序。

C语言——编译器如何将C源文件编译成可执行代码?

图一 流程图

C语言——编译器如何将C源文件编译成可执行代码?

举例如下:

Windows环境下的GCC编译器

C语言——编译器如何将C源文件编译成可执行代码?

图二 源文件test.c

01

预编译

命令行:gcc -E test.c -o test.i

C语言——编译器如何将C源文件编译成可执行代码?

图三 预编译文件test.i(部分)

可以看到,stdio.h文件已经被包含进test.i中。

02

编译

命令行:gcc -S test.c -o test.s

C语言——编译器如何将C源文件编译成可执行代码?

图四 汇编源文件test.s(部分)

命令行:gcc -c test.c -o test.o

C语言——编译器如何将C源文件编译成可执行代码?

图五 二进制文件test.o(部分)

03

链接

命令行:gcc test.o -o test

C语言——编译器如何将C源文件编译成可执行代码?

图六 所有文件

C语言——编译器如何将C源文件编译成可执行代码?

图七 执行结果


以上是关于c语言是如何编译成二进制的主要内容,如果未能解决你的问题,请参考以下文章

程序编译链接后形成的可执行文件是啥文件

C/C++语言编译生产可执行的二进制文件的过程??求大神详尽解释,

谁能帮我把一个hex文件反编译为c语言文件?

hex文件转换成C语言

Zephyr在编译时将二进制文件转化成c语言数组

Linux内存总结