C语言编译器,神奇的魔法师
我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为 可执行程序(Executable Program) 。在 Windows 下,可执行程序的后缀有 .exe 和 .com(其中 .exe 比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。
可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。
例如,在屏幕上输出“VIP会员”,C语言的写法为:
puts("VIP会员");
二进制的写法为:
你感受一下,直接使用二进制是不是想撞墙,是不是受到一吨重的伤害?
在计算机发展的初期,程序员就是使用这样的二进制指令来编写程序的,那个拓荒的年代还没有编程语言。
直接使用二进制指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁查询指令手册,而且除错会异常苦恼,要直接面对一堆二进制数据,让人眼花缭乱。另外,用二进制指令编程步骤繁琐,要考虑各种边界情况和底层问题,开发效率十分低下。
这就倒逼程序员开发出了编程语言,提高自己的生产力,例如汇编、C语言、C++、Java、Python、Go语言等,都是在逐步提高开发效率。至此,编程终于不再是只有极客能做的事情了,不了解计算机的读者经过一定的训练也可以编写出有模有样的程序。
什么是编译器
C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,根本不认识,CPU只认识几百个二进制形式的指令。这就需要一个工具,将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成 .exe 程序;这个工具是一个特殊的软件,叫做 编译器(Compiler) 。
编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为 编译(Compile) 。
编译也可以理解为“翻译”,类似于将中文翻译成英文、将英文翻译成象形文字,它是一个复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件五个步骤,期间涉及到复杂的算法和硬件架构。对于学计算机或者软件的大学生,“编译原理”是一门专业课程,有兴趣的读者请自行阅读《编译原理》一书,这里我们不再展开讲解。
注意:不了解编译原理并不影响我们学习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盘、摄像头等外围设备,因为只有主机太不方便了,必须有外设才能玩的爽。
集成开发环境也是这个道理,只有编译器不方便,所以还要增加其他的辅助工具。
选择哪种集成开发环境
C语言的集成开发环境有很多种,尤其是 Windows 下,多如牛毛,初学者往往不知道该如何选择。我们将在接下来的四篇文章中,分别讲解 Windows、Mac OS、Linux、Android 和 iOS 下集成开发环境的选择:
- Windows下C语言开发环境的搭建
- Linux下C语言开发环境的搭建
- Mac OS下C语言开发环境的搭建
- 在手机上编译和运行C语言程序
当然,你不用全部都了解,如果你使用 Windows,那么请忽略 Mac OS 和 Linux;如果你使用 Mac OS,那么请忽略 Windows 和 Linux。
C语言编译器,神奇的魔法师相关推荐
- 单片机c语言编译软件6,eUIDE下载-单片机c语言编译器 v1.07.32.23 官方版 - 安下载...
eUIDE是一款专业的单片机c语言编译器,EM78系列集成开发环境是面向项目的ELAN EM78系列微控制器的开发工具,它包括UICE开发在线仿真器和eUIDE软件工具:eUIDE是基于PC端的UIC ...
- 毕业设计 c语言编译器的设计开发-字节代码格式设计与实现 开题报告,C语言编译器设计与实现...
C语言编译器设计与实现(任务书,外文翻译,毕业论文20000字,答辩PPT) 摘 要 随着计算机的广泛应用,计算机程序设计语言也从初期的机器语言发展为汇编语言,以及现在的各种高级程序设计语言.而编译技 ...
- 最严谨的计算机语言p,用于PLC的华P语言编译器设计及实现.pdf
2009年10月 沈阳理工大学学报 V01.28No.5 OFSHENYANGUGONGUNIVERSITYOct.2 第28卷第5期 TRANSACTIONS 0 09 文章编号:1003-1251 ...
- 在Windows平台如何选择C语言编译器?
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104995539 选 ...
- 《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍
本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.3节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.3 主流 ...
- 【软件开发底层知识修炼】五 gcc-C语言编译器
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 文章目录 1.GCC与gcc 2.gcc的幕后工作 3.实用的gcc ...
- java c语言 for_Java能写C语言编译器吗
用java是可以写语言编译器的,用任何语言工具写都可以.各语言开发工具间只有开发效率的差异,没有可行不可行的区别. 编译器其实就是一个翻译工具,它可以把代码直接翻译成二进制文件交给CPU执行(二进制指 ...
- c语言网页版在线编译器_C语言编译器IDEapp下载-C语言编译器IDE官方版下载v1.5.1 安卓版...
c语言编译器IDE是专门为学习c语言的人专门打造的,解决了很多人身边没电脑的问题,这款软件是手机端的编译神器,用手机也可以学习c语言,软件中有很多详细的讲解原理,可以非常好的学习c语言,是初学者的好帮 ...
- c语言编译器app官网下载,c语言编译器
C语言编译器,一款帮助用户快速在收集编辑C语言的办公软件.界面简单干净,编辑页面可以选择白天黑夜模式.每次退出都会自动保持编辑记录,下次打开直接继续编辑.还有C语言编辑资料可供用户学习. c语言编译器 ...
- C语言编译器不检查数组下标越界
这两天被人问了一个问题说假如C/C++访问下表越界的数组元素会报错么,于是充满好奇心的我动手试了一下,WTF,果然没有报错,但是会给程序带来莫名其妙的结果(比如十次的循环但是变成了死循环,但八次却可以 ...
最新文章
- python 引用和对象理解
- 汇编语言的准备知识--给初次接触汇编者 之三
- mysql online ddl 5.6_MySQL 5.6的Online DDL功能测试
- NPM服务器维修,npm run dev无法启动服务器
- JDBC ResultSet分析
- ug侧铣头编程_数控UG编程,四轴前倾角和侧倾角
- English Resources
- 异步fifo_面试必杀技:异步FIFO(上) CDC的那些事(5)
- 如何在Web App Project 或者 Web Site Project的App_Code 内使用 Profile/ProfileCommon
- csdn专用必杀技----谷歌浏览器插件
- 微信小程序“淘淘猜成语”开发教程(该成语接龙已上线,功能齐全)
- 数字版权管理 (DRM) 续
- c语言简单的图案设计,分形艺术图案设计
- stata陈强:第四章 stata操作基础
- java获得文件的md5码_java获取文件md5码
- Godaddy Web Hosting http 重定向至 https协议
- 群友(淡泊、明志)总结android面试题
- 格兰富Grundfos CM3-2 A-R-A-E-AVBE F-A-A-N
- 流体仿真中,六面体(Hex)网格的求解效率真的比四面体(Tet)高”很多”么?
- 三星苹果还能笑多久?联想挑战智能手机全球霸主
热门文章
- Linux中fstat、stat和lstat的用法与区别
- 世界数学史册上以***数学家命名的研究成果
- 温度传感器室温监控仪
- 2022-2028全球与中国防弹汽车玻璃市场现状及未来发展趋势
- MAT之SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对一元函数优化求解
- python连接oracle报错DPI-1047
- 将Vue项目代码打包成桌面应用
- 近十年来出现的计算机术语,近十年来科技英语翻译研究评述(2003—2012).doc
- PostgreSQL报表统计历史12月度数据,无数据补零
- 仿站长之家查询源码php,仿站长之家博客 织梦IT资讯博客源码 v1.0