编译器需要统一吗
C语言编译器和IDE的选择是Windows的IDE使用Visual Studio或者Dev C++,XP或者Win7的IDE使用C-Free。linux的IDE使用GCC,Mac OS X的IDE使用Xcode。
在Windows下,可执行程序(Executable Program)大部分是.exe程序,它是一系列计算机指令和数据的集合。这些指令都是二进制形式的,CPU可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。
计算机发展初期,程序员就是使用这些二进制形式的CPU指令来编写程序的。
直接使用CPU指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁查询指令手册,而且除错会异常苦恼,要直接面对一堆二进制数据,让人眼花缭乱。另外,用CPU指令编程步骤繁琐,要考虑各种边界情况和底层问题,开发效率十分低下。
这就倒逼程序员开发出了编程语言,提高自己的生产力;例如汇编、C语言、C++、Java、Python、Go语言等,都是在逐步提高开发效率。至此,编程终于不再是只有极客能做的事情了,不了解计算机的读者经过一定的训练也可以编写出有模有样的程序。
选择合适的IDE:
实际开发中,除了编译器是必须的工具,我们往往还需要很多其他辅助软件,例如编辑器、调试器、文件管理等,这些工具通常被打包在一起,统一发布和安装。
例如Visual Studio、Dev C++、Xcode、Visual C++6.0、Code:Blocks、C-Free等,它们统称为IDE(Integrated Development Environment,集成开发环境)。
1、Windows:
Windows下的IDE比较多,我推荐使用Visual Studio或者Dev C++;如果你的操作系统是XP或者Win7,你也可以使用C-Free。另外,国内很多高校还在使用Visual C++6.0,把它作为C语言教学的工具。
①Visual C++6.0(简称VC6.0)是微软开发的一款经典的IDE,很多高校都以VC6.0为教学工具来讲解C和C++。但VC6.0是1998年的产品,很古老了,在Win7、Win8、Win10下会有各种各样的兼容性问题,甚至根本不能运行,所以不推荐使用。
②Visual Studio(简称VS)是Visual C++6.0的升级版,增加了很多新特性,支持了更多的语言,是Windows下的标准IDE,实际开发中大家也都在使用。不过VS有点庞大,安装包有2~3G,下载不便,而且会安装很多暂时用不到的工具,安装时间在半个小时左右。
为了适应最新的Windows操作系统,微软每隔一段时间(一般是一两年)就会对VS进行升级。VS的不同版本以发布年份命名,例如VS2010是微软于2010年发布的,VS2017是微软于2017年发布的。
③Dev C++是一款免费开源的C/C++IDE,内嵌GCC编译器(GCC编译器的Windows移植版),是NOI、NOIP等比赛的指定工具。Dev C++的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,缺点是调试功能弱。
NOI是National Olympiad in Informatics的缩写,译为“全国青少年信息学奥林匹克竞赛”;NOIP是National Olympiad in informatics in Provinces的缩写,译为“全国青少年信息学奥林匹克联赛”。
NOI、NOIP都是奥林匹克竞赛的一种,参加者多为高中生,获奖者将被保送到名牌大学或者得到高考加分资格。
④C-Free是一款国产的Windows下的C/C++IDE,最新版本是5.0,整个软件才14M,非常轻巧,安装也简单,界面也比Dev C++漂亮。C-Free的缺点也是调试功能弱。
可惜的是,C-Free已经多年不更新了,组件都老了,只能在XP、Win7下运行,在Win8、Win10下可能会存在兼容性问题,所以我才重点推荐Dev C++,否则我会更加倾向于C-Free。
本教程的目录中只列出了VS2010、VS2015、Dev C++的安装和使用,希望尝试C-Free和VC6.0读者请猛击《在C-Free下运行C语言程序》《在VC6.0下运行C语言程序》。
2、Linux:
在Linux下使用GCC(GNU Compiler Collection,GNU编译器套件)。GCC是GUN组织开发的自由软件,除了支持C,还支持C++、Java、Objective-C等,它是Linux平台编译器的事实标准。
3、Mac OS X:
在Mac OS X下使用Xcode。Xcode是由Apple官方开发的IDE,支持C、C++、Objective-C、Swift等,可以用来开发Mac OS X和iOS上的应用程序。
Xcode最初使用GCC作为编译器,后来由于GCC的不配合,改用LLVM/Clang。虽然C语言的IDE众多,但是C语言的绝大部分内容在各个IDE下都是通用的。
2. 华为手机方舟编译器怎么用
华为手机方舟编译器主要用于提升应用程序的运行效率,但普通用户通常无法直接使用它,因为它主要是面向开发者的工具。以下是关于华为手机方舟编译器使用的相关说明:
1. 编译器功能: 多语言联合优化:方舟编译器是业界首个支持多语言联合优化的编译器,开发者可以一次性将多语言代码统一编译为一套机器码,减少跨语言运行时的额外消耗,并进行跨语言的联合优化。 减少资源消耗:与安卓传统的编译技术相比,方舟编译器在开发环境中即可完成全部代码的编译,手机安装应用程序后无需依赖虚拟机资源,即可全速运行程序,从而大幅降低系统资源的消耗。
2. 使用场景: 开发者环境:方舟编译器主要用于开发者的开发环境中。开发者在编写应用程序时,可以使用方舟编译器将代码编译为高效的机器码,从而提升应用程序的运行效率。 系统优化:华为手机在自身的系统优化中,也应用了方舟编译器。例如,EMUI9.1系统通过对系统组件SystemServer应用方舟编译器,实现了系统操作流畅度和响应性能的大幅提升。
3. 用户体验: 提升运行效率:虽然用户无法直接使用方舟编译器,但他们可以享受到由方舟编译器编译的应用程序带来的运行效率提升。这包括更快的启动速度、更流畅的操作体验等。 无需额外操作:对于普通用户来说,使用华为手机时无需进行任何额外操作即可享受到方舟编译器带来的性能提升。这些优化是在应用程序开发和系统更新过程中自动完成的。
综上所述,华为手机方舟编译器是一个面向开发者的工具,用于提升应用程序的运行效率。普通用户无需直接使用它,但可以享受到由它带来的性能提升。
3. 怎样使自己的c程序既能在win又能linux系统上运行
你如果是想自己写一个C程序,编译成可执行文件后,既可以在Win上跑又可以在Linux上跑,就目前我的了解是不可能的。
但是同一个C程序,只要在不同的编译器上编译过后就可以在不同的系统上跑,那是完全可行的。
举个例子:VC++编译一个C程序可以在Win上跑,相同的程序用gcc编译了,就可以在Linux上跑。
如果涉及到操作系统相关的系统函数可以用宏定义隔开。
举个例子:
ifdef _WinNT_
你的Windows系统代码
ifdef _Linux_
你的Linux系统代码
使用不同编译器编译时,在相关编译器里设置相应的宏即可。比如gcc用 -D_Linux_参数。详细的情况可以去了解预处理关于ifdef相关章节。
4. C语言之初还有很多不统一的版本,没有标准规范,另外还有几个元老级比C语言还早的同行,怎么创造语言
语言是依赖于编译器的。当你写出了一个全新的编译器,你就发明了一种新的计算机语言。如果你想制作自己的编译器判空,需要学习编译原理(编译原理我还没学,没法跟你讲)这里简单介绍一下这些语言是怎么来的以及编译器是如何工作的编译器本身也是可执行文件,它的工作是遵循一定规则,将代码转化为二进制的可执行文件。如果一些编橡搭译器遵循相同的转化规则,那么即使细节上有所不同,同样的代码也在这些编译器上都能生成相同功能的可执行文件,这样就可以说它们是使用同一种语言的编译器。C标准就是这种规则的标准规范,也就是C语言的标准规范,可以方便代码移植和交流。没有C标准的时候,可能自己抄了别人的代码,别人运行得好好的,结果自己这里一堆bug。最初的语言是机器语言,用二进制编写,可以直接写出可执行文件,不需要编译器。后来因为机器语言太难记忆,太难阅读,于是汇编语言被发明出来。汇编语言是将机器语言的指令换成一些容易辨识和记忆的符号的语言,汇编语言的编译器是用机器语言写的,称为汇编器。汇编器工作是将那些符号替换成二进制的指令,于是就生成了可执行文件。最早的c语言编译器是用汇编语言写的,它将c语言代码转化为汇编代码,再将汇编代码转化为可执行文件。后来的c语言编译器都是用先前的c语言编译器编写的。后来的很多语言的编译器也都是用c语言写出来的。现在很少人直接使用编译器,都是使用将写代码和编译功能,以及其它功能集于一体的集成开发环境(IDE)如果你只是想简单地替换一些符号,可以专门写一个程序,用于将代码文件的句号换成分号;进一步,可以集成文本编辑功能,在程序里面写完就转化为c语言的代码;更进一步,设置一个按钮,链接编译器,快捷地将转化后的梁冲拿代码编译。你也可以使用EditPlus这样的工具实现后两个功能
5. 不同的c语言编译系统差别在哪里代码是否 存在兼容性的问题
ANSI
C
一般都可以支持,但也涉及到不同版本的C标准的兼容性问题,比如VC6不支持C99,VS2003,2005,2008,20120等就可以部分支持C99标准;而且很多标准并没有规定实现,不同的
编译器
实现可能不同,比如C标准只规定了short<=int<=long,但并没有规定
字节
数,导致不同的编译器
数据类型
的大小各不相同。
非
ANSI
C标准的话,不同的编译器一般都有不同的实现,需要分别实现。
在移植到不同编译器的时候这些都要注意处理,比较常规的做法是数据类型和
函数
等自己根据不同编译器封装成一个统一的格式,在
程序
中使用封装后的数据类型或函数,而不要使用原生类型,这样在移植时只需要在封装的地方根据编译器的不同进行修改就可以了,不需要再修改
源代码
。