当前位置:首页 » 编程软件 » 操作系统编译器

操作系统编译器

发布时间: 2022-06-07 13:29:52

linux操作系统中默认安装的c语言编译系统是

Linux操作系统中默认安装的C语言编译系统是GCC(GNU Compiler Collection),是Linux下最常用的C语言编译器,是GNU项目中符合ANSI,C标准的编译系统,能够编译用C、Object C等语言编写的程序。

同时它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Mola,3和Ada等。

C语言的标准

1.1 K,RC

1973年,Dennis M Ritchie设计和实现了C语言,从那以后使用者逐渐增加。

1978年,Kernighan 和 Ritchie 合着了《The C Programming Language》,这本书定义的C语言被称为 K,RC 。

1.2 标准 C

随着C语言使用日益广泛,出现了许多新问题,人们迫切希望对C语言进行标准化。

第一个标准:C89

1983年,ANSI成立了一个委员会X3J11,对C语言进行标准化。

1989年,ANSI 批准了第一个C语言标准 X3,159-1989,并于1990年公布,被称为 ANSIC、C89 或 C90。

1990年,这个标准又被批准为ISO标准:ISO,IEC 9899:1990 。

ANSIC标准被ISO采纳,并且ISO发布的修订版也被ANSI采纳,因此ANSI标准和ISO标准实际上没有技术区别。这些名称的含义是相同的:ANSI C、ISO C、标准C。

1994年和1996年,ISO发布了两个技术更正,更正了1990ISOC标准中的错误。

第二个标准:C94

1995年,ISO发布了1990ISOC标准的一个补充,称为AMD1。扩充后的标准被称为C94或C95。

第三个标准:C99

1999年,ISO发布了一个新版本的ISOC标准:ISO,IEC9899:1999,称为C99。

2001年、2004年和2007年,ISO发布了三个技术更正,更正了1999ISOC标准中的错误。

第四个标准:C11

2011年,ISO发布了一个新版本的ISOC标准:ISO,IEC9899:2011,称为C11。C11 是 C语言的最新标准。

1.3 GNUC

1984年,Richard Stallman 发起了GNU计划,它的目标是开发一个完整且自由的Unix-like操作系统(GNU系统)。

GNU系统是一个完整的操作系统,包括操作系统内核和各种工具软件。各种GNU系统的变种(例如Redhat、Ubuntu等)已经被广泛使用,它们使用的操作系统内核都是Linux。虽然这些系统经常被称为Linux,但准确地说,它们是GNU/Linux系统。

GNU在编写Linux时扩展了标准C,称为GNUC。

GNU C的扩展详见:Extensions to the C Language Family

GNU C也称为Linux C,一般用于Linux上的开发,而标准C可以跨平台。

GNU C使用的编译器是GCC。

㈡ 适合win10系统的c语言编译器

桌面操作系统

对于当前主流桌面操作系统而言,可使用 VisualC++、GCC以及 LLVM Clang 这三大编译器。

Visual C++(简称 MSVC)只能用于 Windows 操作系统;GCC 和 LLVM Clang除了可用于Windows操作系统之外,主要用于 Unix/Linux操作系统。

像现在很多版本的 Linux 都默认使用 GCC 作为C语言编译器,而像 FreeBSD、macOS 等系统默认使用 LLVM Clang 编译器。由于当前 LLVM 项目主要在 Apple 的主推下发展的,所以在 macOS中,Clang 编译器又被称为 Apple LLVM 编译器。

MSVC 编译器主要用于 Windows 操作系统平台下的应用程序开发,它不开源。用户可以使用 Visual Studio Community 版本来免费使用它,但是如果要把通过 Visual Studio Community 工具生成出来的应用进行商用,那么就得好好阅读一下微软的许可证和说明书了。

而使用 GCC 与 Clang 编译器构建出来的应用一般没有任何限制,程序员可以将应用程序随意发布和进行商用。

MSVC 编译器对 C99 标准的支持就十分有限,加之它压根不支持任何 C11 标准,所以本教程中设计 C11 的代码例子不会针对 MSVC 进行描述。所幸的是,Visual Studio Community 2017 加入了对 Clang 编译器的支持,官方称之为——Clang with Microsoft CodeGen,当前版本基于的是 Clang 3.8。

也就是说,应用于 Visual Studio 集成开发环境中的 Clang 编译器前端可支持 Clang 编译器的所有语法特性,而后端生成的代码则与 MSVC 效果一样,包括像 long 整数类型在 64 位编译模式下长度仍然为 4 个字节,所以各位使用的时候也需要注意。

为了方便描述,本教程后面涉及 Visual Studio 集成开发环境下的 Clang 编译器简称为 VS-Clang 编译器。

嵌入式系统

而在嵌入式系统方面,可用的C语言编译器就非常丰富了,比如:

  • 用于 Keil 公司 51 系列单片机的 Keil C51 编译器;

  • 当前大红大紫的 Arino 板搭载的开发套件,可用针对 AVR 微控制器的 AVRGCC 编译器;

  • ARM 自己出的 ADS(ARM Development Suite)、RVDS(RealView Development Suite)和当前最新的 DS-5 Studio;

  • DSP 设计商 TI(Texas Instruments)的 CCS(Code Composer Studio);

  • DSP 设计商 ADI(Analog Devices,Inc.)的 Visual DSP++ 编译器,等等。


  • 通常,用于嵌入式系统开发的编译工具链都没有免费版本,而且一般需要通过国内代理进行购买。所以,这对于个人开发者或者嵌入式系统爱好者而言是一道不低的门槛。


  • 不过 Arino 的开发套件是可免费下载使用的,并且用它做开发板连接调试也十分简单。Arino 所采用的C编译器是基于 GCC 的。


  • 还有像树莓派(Raspberry Pi)这种迷你电脑可以直接使用 GCC 和 Clang 编译器。此外,还有像 nVidia 公司推出的 Jetson TK 系列开发板也可直接使用 GCC 和 Clang 编译器。树莓派与 Jetson TK 都默认安装了 Linux 操作系统。


  • 在嵌入式领域,一般比较低端的单片机,比如 8 位的 MCU 所对应的C编译器可能只支持 C90 标准,有些甚至连 C90 标准的很多特性都不支持。因为它们一方面内存小,ROM 的容量也小;另一方面,本身处理器机能就十分有限,有些甚至无法支持函数指针,因为处理器本身不包含通过寄存器做间接过程调用的指令。


  • 而像 32 位处理器或 DSP,一般都至少能支持 C99 标准,它们本身的性能也十分强大。而像 ARM 出的 RVDS 编译器甚至可用 GNU 语法扩展。


  • 下图展示了上述C语言编译器的分类。


㈢ 常见的C语言编译器是什么

目前最流行的C语言编译器有以下几种:

1、GNU Compiler Collection 或称GCC

GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。

GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的着名例子,由自由软件基金会以GPL协议发布。

2、Microsoft C 或称 MS C

Microsoft C 是c语言的一种IDE(集成开发环境),常见的还有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,High C,Turbo C等等......

3、Borland Turbo C 或称 Turbo C

Turbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套 Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 这些软件很受用户欢迎。

(3)操作系统编译器扩展阅读:

C编译的整个过程很复杂,大致可以分为以下四个阶段:

1、预处理阶段在该阶段主要完成对源代码的预处理工作,主要包括对宏定义指令,头文件包含指令,预定义指令和特殊字符的处理,如对宏定义的替换以及文件头中所包含的文件中预定义代码的替换等,总之这步主要完成一些替换工作,输出是同源文件含义相同但内容不同的文件。

2、编译、优化阶段编译就是将第一阶段处理得到的文件通过词法语法分析等转换为汇编语言。优化包括对中间代码的优化,如删除公共表达式,循环优化等;和对目标代码的生成进行的优化,如如何充分利用机器的寄存器存放有关变量的值,以减少内存访问次数。

3、汇编阶段将汇编语言翻译成机器指令。

4、链接阶段链接阶段的主要工作是将有关的目标文件连接起来,即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的目标文件成为一个能够被操作系统装入执行的统一整体。

㈣ windows10系统自带编译器吗

不一定。例如:Windows 操作系统就是不自带编译器的,它是一个独立的操作系统,如果你需要编程的话,你还需要单独购买 MS Visual C++编译器,然后在安装好 Windows系统的前提下面,再安装运行 MS VC++,此时 VC++才能够对你编写的 C 语言源程序进行编译、连接,最后产生可执行程序;而Linux则不同,它是自带编译器 gcc 的,所以你在安装 Linux系统时,只要把 gcc 选上,就可以把 gcc 编译器连同 Linux 操作系统一起安装好。就不需要单独购买 gcc 编译器软件了。

㈤ 什么是编译器

编译器

编译器是一种特殊的程序,它可以把以特定编程语言写成的程序变为机器可以运行的机器码。我们把一个程序写好,这时我们利用的环境是文本编辑器。这时我程序把程序称为源程序。在此以后程序员可以运行相应的编译器,通过指定需要编译的文件的名称就可以把相应的源文件(通过一个复杂的过程)转化为机器码了。

[编辑]编译器工作方法
首先编译器进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,我们也称为obj文件。再经过链接器的链接就可以生成最后的可执行代码了。有些时候我们需要把多个文件产生的目标文件进行链接,产生最后的代码。我们把一过程称为交叉链接。

一个现代编译器的主要工作流程如下:

* 源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)

工作原理

编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器言)。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。

编译器种类

编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如: 自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。

预处理器(preprocessor)

作用是通过代入预定义等程序段将源程序补充完整。

编译器前端(frontend)

前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a, =, b , +, c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。

编译器后端(backend)

编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。

一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内(intraproceral)还是函数之间(interproceral)进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。

编译器分析(compiler analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizing compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(high level IR)接近输入的源程序的格式,与输入语言相关(language dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle level IR)与输入语言无关,低层的中间代码(Low level IR)与机器语言类似。 不同的分析,优化发生在最适合的那一层中间代码上。

常见的编译分析有函数调用树(call tree),控制流程图(Control flow graph),以及在此基础上的变量定义-使用,使用-定义链(define-use/use-define or u-d/d-u chain),变量别名分析(alias analysis),指针分析(pointer analysis),数据依赖分析(data dependence analysis)等等。

上述的程序分析结果是编译器优化(compiler optimization)和程序变形(compiler transformation)的前提条件。常见的优化和变新有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threaded code)。

机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)的策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令(instruction selection),如何合并几句代码成一句等等。

㈥ 操作系统内核和编译器哪个难度更大

整体而言,是同级别的难,但难点各有侧重。
若论算法,编译器更难,而且难不止一个级别。操作系统的算法难度只能算一般水平。
但是操作系统涉及的东西更多,本身结构更复杂,硬件处理也更加复杂。

㈦ 程序语言,操作系统,编译器三者之间有何关系

汇编语言的编译器很多,像MASM,NASM,TASM,gas等等,编译器不一定用什么语言来写,像pascal最初的时候编译器本身是用汇编和pascal语言写的,但大部分编译器是用C语言来写的.windows向来封闭,不知道是用什么写的,应该是用C吧。C是一种编程语言,windows是一种操作系统,二者没有直接关系。C的各个版本的不同在编译器对C语言的扩充和处理上,而不在操作系统上,同样是在windows平台上,TC和VC就不一样。
这三者的关系,程序语言可以用来写操作系统和编译器,操作系统用来编译器运行,编译器用来编译程序语言,编出来的东西可以是操作系统和编译器。

㈧ 操作系统都自带编译器吗如Windows

不一定。例如:Windows 操作系统就是不自带编译器的,它是一个独立的操作系统,如果你需要编程的话,你还需要单独购买 MS Visual C++编译器,然后在安装好 Windows系统的前提下面,再安装运行 MS VC++,此时 VC++才能够对你编写的 C 语言源程序进行编译、连接,最后产生可执行程序;而Linux则不同,它是自带编译器 gcc 的,所以你在安装 Linux系统时,只要把 gcc 选上,就可以把 gcc 编译器连同 Linux 操作系统一起安装好。就不需要单独购买 gcc 编译器软件了。

㈨ 操作系统和编译器的关系

操作系统是和硬件的桥梁,所有软件如果要运行,就得在装有操作系统的机器上运行。没有安装操作系统的计算机,是不能运行其它软件的,装上了linux,你才能在它上面安装gcc, 你可以用gcc编译各种软件,比如linux版的QQ等,同样你也可以用gcc编译linux系统软件(因为系统软件也是软件),并把编译好的linux软件放到机器上安装。

当然也可以写个编译器在没有操作系统的机器上编译,但这个编译器就要做很多和硬件打交道的事。至少gcc是不行的,要运行在操作系统上的。

热点内容
linux下的程序开发 发布:2025-05-19 18:55:02 浏览:925
该文件夹未包含 发布:2025-05-19 18:54:17 浏览:194
安卓拳皇对战用哪个平台 发布:2025-05-19 18:42:39 浏览:530
华为畅玩5怎么取消锁屏密码 发布:2025-05-19 18:42:38 浏览:582
linuxrm文件夹 发布:2025-05-19 18:40:25 浏览:972
谭浩强c语言错误 发布:2025-05-19 18:39:33 浏览:951
安卓和苹果用流量哪个划算 发布:2025-05-19 18:38:04 浏览:408
安卓手机怎么设定背景墙 发布:2025-05-19 18:29:40 浏览:1001
androidstudio断点调试 发布:2025-05-19 18:20:23 浏览:766
abaqus如何配置证书 发布:2025-05-19 18:19:38 浏览:583