[C语言]什么是编辑器和编译器,什么是集成开发环境?编译原理又是什么?

我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有 .exe 和 .com(其中 .exe 比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。

可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。

例如,在屏幕上输出“同年新月”,C语言的写法为:

puts("同年新月");

在计算机发展的初期,程序员就是使用二进制指令来编写程序的,那个拓荒的年代还没有编程语言。
直接使用二进制指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁查询指令手册,而且除错会异常苦恼,要直接面对一堆二进制数据,让人眼花缭乱。另外,用二进制指令编程步骤繁琐,要考虑各种边界情况和底层问题,开发效率十分低下。

这就倒逼程序员开发出了编程语言,提高自己的生产力,例如汇编、C语言、C++、Java、Python、Go语言等,都是在逐步提高开发效率。至此,编程终于不再是只有极客能做的事情了,不了解计算机的读者经过一定的训练也可以编写出有模有样的程序。

什么是编辑器

编辑器的概念很简单,百度百科上这么写道:

编辑器是软件程序,一般是指用来修改电脑档案的编写软件,但也有人称 PE2、HE4(汉书)……等文书软件为编辑器。常见的编辑器有文本编辑器、网页编辑器、源程序编辑器、图像编辑器,声音编辑器和视频编辑器等。

当然在这里我们主要讲的是代码编辑器,一个好的编辑器可以节省开发时间,提高工作效率,它们都能提供非常方便易用的开发环境。你可以用它们来编写代码,查看源文件和文档等,简化你的工作。以下是一些常用的代码编辑器,每个不同的编辑器都有不尽相同的目标用户群体。

NodePad++ :Notepad++ 是一款免费但优秀的代码编辑器,运行在 Windows 环境下,可以支持多种编程语言。 Vim :
Vim 是从 vi 发展出来的一个文本编辑器,在程序员中被广泛使用,运行在Linux环境下。 GNU Emacs : Emacs
是一个轻便、可扩展、免费的编辑器,它比其它的编辑器要更强大,是一个整合环境,或可称它为集成开发环境。它可以处理文字,图像,高亮语法,将代码更直观地展现给开发者。

什么是编译器

C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,根本不认识,CPU只认识几百个二进制形式的指令。这就需要一个工具,将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成 .exe 程序;这个工具是一个特殊的软件,叫做编译器(Compiler)。

编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为编译(Compile)。

·机器语言、汇编语言和高级语言区别

1. 机器语言
计算机执行的二进制命令,都是0和1表示的。
2. 汇编语言
具有一定意义的文字命令,与机器语言一一对应。汇编语言可以通过汇编得到机器语言,机器语言可以通过反汇编得到汇编语言。汇编过程还包括变量内存管理,即经过汇编之后所有的变量和函数都变成了地址,而常量也变成了对应的值。
但是汇编语言还是不够直观,一个简单的动作需要大量的语句来描述,因此又有了高级语言。
3. 高级语言
更简单,符合人们的习惯,也更容易理解和修改。高级语言经过编译器编译之后可以得到目标程序。
编译器的作用就是把高级语言的源代码转换成对应平台的目标代码。高级语言书写比较简单,但是翻译起来比较复杂,同样的高级语言语句可以有不同的机器语言实现方法。

而编译器所做的就是进行这三种语言的互相转换。大多数情况下,编译是从更高级的语言(高级语言、汇编语言)编译成低级语言(汇编语言、机器语言)。

另一种情况是,从他人的可执行程序(低级语言)编译成高级语言,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。这个过程叫做反向编译。

编译器:将你所编辑的源代码编译成机器所能理解的语言,比如VC++把你的.cpp文件编译成.obj文件(经过编译器编译这时的代码计算机已经可以识别),而最后的.exe则是通过连接生成的(这里的工作是由连接器完成的,跟编译器无关)。

编译也可以理解为“翻译”,类似于将中文翻译成英文、将英文翻译成象形文字,它是一个复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件五个步骤,期间涉及到复杂的算法和硬件架构。对于学计算机或者软件的大学生,“编译原理”是一门专业课程,有兴趣的读者请自行阅读《编译原理》一书,这里我们不再展开讲解。

注意:不了解编译原理并不影响我们学习C语言,我也不建议初学者去钻研编译原理,贪多嚼不烂,不要把自己绕进去。

C语言的编译器有很多种,不同的平台下有不同的编译器,例如:

Windows 下常用的是微软开发的 cl.exe,它被集成在 Visual Studio 或 Visual C++ 中,一般不单独使用;

Linux 下常用的是 GUN 组织开发的 GCC,很多 Linux 发行版都自带 GCC;

Mac 下常用的是 LLVM/Clang,它被集成在 Xcode 中(Xcode 以前集成的是 GCC,后来由于 GCC 的不配合才改为
LLVM/Clang,LLVM/Clang 的性能比 GCC 更加强大)。

你的代码语法正确与否,编译器说了才算,我们学习C语言,从某种意义上说就是学习如何使用编译器,让编译器生成可执行程序(例如 Windows 下的 .exe 程序)。

编译器可以 100% 保证你的代码从语法上讲是正确的,因为哪怕有一点小小的错误,编译也不能通过,编译器会告诉你哪里错了,便于你的更改。

什么是集成开发环境

实际开发中,除了编译器是必须的工具,我们往往还需要很多其他辅助软件,例如:

编辑器:用来编写代码,并且给代码着色,以方便阅读;

代码提示器:输入部分代码,即可提示全部代码,加速代码的编写过程;

调试器:观察程序的每一个运行步骤,发现程序的逻辑错误;

项目管理工具:对程序涉及到的所有资源进行管理,包括源文件、图片、视频、第三方库等;

漂亮的界面:各种按钮、面板、菜单、窗口等控件整齐排布,操作更方便。

这些工具通常被打包在一起,统一发布和安装,例如 Visual Studio、Dev C++、Xcode、Visual C++ 6.0、C-Free、Code::Blocks 等,它们统称为集成开发环境(IDE,Integrated Development Environment)。

集成开发环境就是一系列开发工具的组合套装。这就好比台式机,一个台式机的核心部件是主机,有了主机就能独立工作了,但是我们在购买台式机时,往往还要附带上显示器、键盘、鼠标、U盘、摄像头等外围设备,因为只有主机太不方便了,必须有外设才能玩的爽。
集成开发环境也是这个道理,只有编译器不方便,所以还要增加其他的辅助工具。

使用 IDE 的过程中会涉及到一些与编程有关的概念,这些概念如果不提前了解,即使能够运行出程序来,也是雾里看花,知其然不知其所以然。下面的内容就是让大家对这些概念有一个简单的了解。

1源文件(Source File)
在开发软件的过程中,我们需要将编写好的代码(Code)保存到一个文件中,这样代码才不会丢失,才能够被编译器找到,才能最终变成可执行文件。这种用来保存代码的文件就叫做源文件(Source File)。

每种编程语言的源文件都有特定的后缀,以方便被编译器识别,被程序员理解。源文件后缀大都根据编程语言本身的名字来命名:

C语言源文件的后缀是.c;

C++语言(C Plus Plus)源文件的后缀是.cpp;

C++ 是站在C语言的肩膀上发展期来的,是在C语言的基础上进行的扩展,C++
包含了C语言的全部内容,将C语言代码放在.cpp文件中不会有错,很多初学者都是这么做的,很多大学老师也是这么教的。但是,我还是强烈建议将C语言代码放在.c文件中,这样能够更加严格地遵循C语言的语法,也能够更加清晰地了解C语言和C++的区别。

2工程/项目(Project)
一个真正的程序(也可以说软件)往往包含多项功能,每一项功能都需要几十行甚至几千行、几万行的代码来实现,如果我们将这些代码都放到一个源文件中,那将会让人崩溃,不但源文件打开速度极慢,代码的编写和维护也将变得非常困难。

在实际开发中,程序员都是将这些代码分门别类地放到多个源文件中。除了这些成千上万行的代码,一个程序往往还要包含图片、视频、音频、控件、库(也可以说框架)等其它资源,它们也都是一个一个地文件。

为了有效地管理这些种类繁杂、数目众多的文件,我们有理由把它们都放到一个目录(文件夹)下,并且这个目录下只存放与当前程序有关的资源。实际上 IDE 也是这么做的,它会为每一个程序都创建一个专门的目录,将用到的所有文件都集中到这个目录下,并对它们进行便捷的管理,比如重命名、删除文件、编辑文件等。

这个为当前程序配备的专用文件夹,在 IDE 中也有一个专门的称呼,叫做“Project”,翻译过来就是“工程”或者“项目”。

3工程类型/项目类型
“程序”是一个比较宽泛的称呼,它可以细分为很多种类,例如:

有的程序不带界面,完全是“黑屏”的,只能输入一些字符或者命令,称为控制台程序(Console Application),例如 Windows 下的 cmd.exe,Linux 或 Mac OS 下的终端(Terminal)。

有的程序带界面,看起来很漂亮,能够使用鼠标点击,称为GUI程序(Graphical User Interface Program),例如 QQ、迅雷、Chrome 等。

有的程序不单独出现,而是作为其它程序的一个组成部分,普通用户很难接触到它们,例如静态库、动态库等。

不同的程序对应不同的工程类型(项目类型),使用 IDE 时必须选择正确的工程类型才能创建出我们想要的程序。换句话说,IDE 包含了多种工程类型,不同的工程类型会创建出不同的程序。

不同的工程类型本质上是对 IDE 中各个参数的不同设置;我们也可以创建一个空白的工程类型,然后自己去设置各种参数(不过一般不这样做)。

    控制台程序对应的工程类型为“Win32控制台程序(Win32 Console Application)”,GUI程序对应的工程类型为“Win32程序(Win32 Application)”。

控制台程序是 DOS 时代的产物了,它没有复杂的功能,没有漂亮的界面,只能看到一些文字,虽然枯燥无趣,也不实用,但是它非常简单,不受界面的干扰,所以适合入门,我强烈建议初学者从控制台程序学起。等大家对编程掌握的比较熟练了,能编写上百行的代码了,再慢慢过渡到GUI程序。

4链接(Link)
上面我们讲到,源代码经过编译(Compile)后就变成了可执行文件,其实这种说法有点笼统,甚至从严格意义上来讲是错误的。源代码要经过编译(Compile)和链接(Link)两个过程才能变成可执行文件。

编译器一次只能编译一个源文件,如果当前程序包含了多个源文件,那么就需要编译多次。编译器每次编译的结果是产生一个中间文件(可以认为是一种临时文件),而不是最终的可执行文件。中间文件已经非常接近可执行文件了,它们都是二进制格式,内部结构也非常相似。

将当前程序的所有中间文件以及系统库(暂时可以理解为系统中的一些组件)组合在一起,才能形成最终的可执行文件,这个组合的过程就叫做链接(Link)。完成链接功能的软件叫做链接器(Linker)。

如果程序只包含了一个源文件,是不是就不需要链接了呢?不是的!

经过编译后程序虽然只有一个中间文件,不再需要和其它的中间文件组合了,但是这个唯一的中间文件还需要和系统库组合,这个过程也是链接。也就是说,不管有多少个源文件,都必须经过编译和链接两个过程才能生成可执行文件。

(注:本文转载于网络文章+个人补充)
ps:另外公众号(同年新月)开了一个月了才刚刚过百的同年关注我,真是让我好伤心啊…求同年们给自己的小伙伴分享一下啊,一起来努力呀!(这么多免费的电子书资源啊 每周还总结重难点 不香吗?)

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: PHP 是一种服务器端的脚本语言,用于开发动态网站和应用程序。它可以运行在各种操作系统之上,如 Windows、Linux、MacOS 等,并支持多种 Web 服务器,如 Apache、IIS 等。 PHP 的架构基于解释型语言,意味着它的代码在执行时会被解释器解释并执行。这种架构使得 PHP 在执行时具有较高的效率,并且代码可以在不同的机器上直接运行。 在执行 PHP 代码时,会先启动 PHP 解释器。当浏览器发送请求到 Web 服务器时,Web 服务器会将请求转发到 PHP 解释器。PHP 解释器会解释 PHP 代码并生成对应的 HTML 代码,然后将 HTML 代码发送回浏览器。 PHP 还支持许多内置函数和扩展库,可以用于实现各种功能。例如,可以使用内置的数据库操作函数来连接数据库并执行 SQL 查询;也可以使用扩展库来实现图像处理、邮件发送等功能。 此外,PHP 还提供了许多可用于开发 Web 应用程序的框架,如 Laravel、Symfony、CodeIgniter 等。这些框架可以大大简化 Web 应用程序的开发过程, ### 回答2: PHP是一种服务器端脚本语言,其架构及原理主要包括解析器、编译器和执行引擎。 PHP的架构基于C/S(Client/Server)模式,即客户端和服务器之间进行通信。当客户端发送一个请求给服务器时,服务器的解析器首先会解析PHP脚本代码。解析器将读取和分析PHP代码,并将其转换为内部数据结构,这个过程被称为解析。 接下来,解析器将进入编译器阶段。编译器将解析器生成的内部数据结构转换为字节码,它是一种中间代码形式,类似于机器码但比机器码更加抽象。编译器的目标是将PHP代码转换为可以在特定平台上执行的代码。 最后,执行引擎将执行编译器生成的字节码。执行引擎是PHP的运行时环境,它负责将字节码转化为可执行指令,并在服务器上执行这些指令。执行引擎的任务是执行PHP脚本中的各种操作、计算和逻辑。 PHP的原理也涉及到一些其他的组件,包括扩展模块、内存管理和数据库访问等。扩展模块允许开发者通过加载和使用现有的库来扩展PHP的功能。内存管理是PHP的重要特性之一,它负责管理PHP脚本的内存分配和释放。数据库访问允许PHP与各种数据库进行交互,来实现数据的存储和检索。 综上所述,PHP的架构及原理主要包括解析器、编译器和执行引擎,其工作流程是解析PHP代码、编译为字节码,并最终由执行引擎执行这些字节码。同时,PHP还涉及到扩展模块、内存管理和数据库访问等组件,来扩展其功能并实现与其他系统的交互。 ### 回答3: PHP(Hypertext Preprocessor)是一种用于开发网站和Web应用程序的脚本语言。它采用了一种C语言风格的语法,结合了其他编程语言的特点,如Java和Perl。 PHP的架构和原理涉及以下几个方面: 1. 解释型语言:PHP是一种解释型语言,它不需要编译,可以直接在服务器上执行。当用户访问包含PHP代码的网页时,服务器会解析并执行其中的PHP代码,并将结果返回给用户。 2. 服务器端执行:PHP是一种服务器端脚本语言,意味着它在服务器上执行而不是在客户端(如浏览器)上执行。这使得PHP可以与数据库进行交互,并生成动态的网页内容。 3. 多平台支持:PHP可以在各种操作系统上运行,包括Windows、Linux和UNIX。这使得开发人员可以根据需要选择最合适的操作系统。 4. 集成开发环境:PHP可以与多种集成开发环境(IDE)搭配使用,如Eclipse、Visual Studio Code等。这些IDE提供了代码编辑、调试和测试等功能,提高了开发效率。 5. 模块化架构:PHP拥有丰富的内置函数和扩展模块,可以轻松地处理各种任务,如文件操作、数据库连接、图像处理等。开发人员还可以自定义函数和类来实现特定的功能。 6. 面向对象编程支持:PHP支持面向对象编程(OOP),开发人员可以使用类、对象、继承、封装等OOP概念来构建可维护和可复用的代码。 7. 数据库支持:PHP与多种数据库系统兼容,如MySQL、Oracle、PostgreSQL等。它提供了丰富的数据库操作函数,可以方便地进行数据的读取、写入和更新。 总的来说,PHP的架构和原理包括解释型语言、服务器端执行、多平台支持、集成开发环境、模块化架构、面向对象编程支持和数据库支持等。这些特点使得PHP成为一种强大且灵活的Web开发语言。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值