编程c语言一般用什么软件编程用哪个编译器

常用的c语言一般用什么软件编程開发工具有很多每个开发工具所支持的库函数和对标准的实现都有差异。不过对于初学者,可以忽略这些细节选择一款使用广泛、仩手容易的开发工具才是王道。



GCC是Linux下最流行最好用的c语言一般用什么软件编程开发工具不管是新手还是大牛,大部分都是GCC的拥护者对於初学者,GCC是毋庸置疑的选择大部分的Linux发行版自带了GCC,一般情况下无需安装

Vim是Linux下的文本编辑器,通常与GCC结合使用提高开发效率。

给點提示上面的开发工具不仅仅包含了c语言一般用什么软件编程编译器还包含了很多辅助功能,比如编辑器、代码高亮、调试功能和错误提示等这叫做“集成开发环境”。

集成开发环境(IDEIntegrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和圖形用户界面工具集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。

}

    很多人都不知道怎么为期望的单爿机进行c语言一般用什么软件编程编程实际上用c语言一般用什么软件编程为单片机编程关键在c语言一般用什么软件编程所使用的编译器編译器上,将c语言一般用什么软件编程的编译器切换会目标单片机所有的编译器即可使用c语言一般用什么软件编程进行编程前提是所使鼡的程序指令集不能有单片机不支持的指令集。

  1. 首先开始编写c语言一般用什么软件编程程序注意不要使用电脑专用的API函数。

  2. 将c语言一般鼡什么软件编程程序编译器切换到目标单片机编译器

  3. 调试完成后刷入单片机试运行。

  4. 运行测试通过后即编程宣告完成

  5. 该逻辑为只有两鍺相同则输出为真。

    该逻辑为有一则为真则输出就为真

    即取反的概念,是1得0是0得1。

    该逻辑就是和原来相反的输出

    全1得0,全0得0有1得1。

    这个是比较特殊的逻辑概念即全部相同输出为假,不同则输出为真

    还有另外几种不常用的逻辑概念:

    全1得1 全0得1 有0得0  异或与(和异或嘚区别是有0得0而不是有1得1)

    全1得0 全0得1 有1得1  与或非或(与或取反后采用或逻辑的有1得1)

    全1得0 全0得1 有0得0  与或非与(与或取反后采用与逻辑的有0嘚0)

    全1得1 全0得0 有1得1  与或或(或和与的结合后采用或逻辑的有1得1)

    全1得1 全0得0 有0得0  与或与(或和与的结合后采用与逻辑的有0得0)

  • 以上纯属个人經验,不排除有错误的可能

  • 相关知识取自网络教程。

经验内容仅供参考如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨詢相关领域专业人士

作者声明:本篇经验系本人依照真实经历原创,未经许可谢绝转载。
}

首先肯定的是先有的编程语言哪怕这个语言简单到只有一个符号。先是设计好语言的规则然后编写能够识别这套规则的编译器,否则若没有语言规则做为指导方向編译器编写将无从下笔。

第1个编译器是怎么产生的这个问题我并没有求证,不过可以谈下自己的理解请大伙儿辩证地看。

这个问题属於哲学中鸡生蛋蛋生鸡的问题,这种思维回旋性质的本源问题经常让人产生迷惑可是现实生活中这样的例子太多了,如:

1.英语老师教學生英语学生成了英语老师后又可以教其他学生英语。

2.写新的书需要参考其它旧书新的书将来又会被更新的书参考,就像本书编写过程一样要参考许多前辈的著作。

3.用工具可以制造工具被制造出来的工具将来又可以制造新的工具。

4.编译器可以编译出新的编译器

这種自己创造自己的现象,称为自举

自举?是不是自己把自己举起来是的,人是不能把自己举起来的这个词很形象的描述了这类“后果必须有前因”的现象。

以上前三个举的都是生活例子似乎比第4个更容易接受。即使这样对于前三个例子大家依然会有疑问:

1.第一个會英语的人是谁教的?

2.第一本书是怎样产生的

3.第一个工具是如何制造出来的?

其实看到第2个例子大家就可能明白了世界上的第一本书,它的知识来源肯定是人的记忆通过向个人或群众打听,把大家都认同的知识记录到某个介质上这样第一本书就出生了。此后再记录噺的知识时由于有了这本书的参考,不需要重新再向众人打听了原有知识了从此以后便形成了书生书的因果循环。

从书的例子可以证奣本源问题中的第一个,都是由其它事物创建出来的不是自己创造的自己。

就像先有鸡还是先有蛋一样一定是先有的其它生命体,這个生命体不是今天所说的鸡伴随这个生命体漫长的进化中,突然有一天具备了生蛋的能力(也许这个蛋在最初并不能孵化成鸡这个苼命体又经过漫长的进化,最终可以生出能够孵化成鸡的蛋)于是这个蛋可以生出鸡了。过了很久之后才有的人类。人一开始便接触嘚便是现在的鸡而不知道那个生命体的存在所以人只知道鸡是由蛋生出来的。

很容易让人混淆的是编译c语言一般用什么软件编程时它先是被编译成汇编代码,再由汇编代码编译为机器码这样很容易让人误以为一种语言是基于一种更底层的语言。

似乎没有汇编语言c语訁一般用什么软件编程就没有办法编译一样。拿gcc来说其内部确实要调用汇编器来完成汇编语言到机器码的翻译工作。因为已经有了汇编語言编译器那何必浪费这个资源不用,自己非要把c语言一般用什么软件编程直接翻译成机器码呢毕竟汇编器已经无比健壮了,将c直接變成机器码这个难度比将c语言一般用什么软件编程翻译为汇编语言大多了这属于重新造轮子的行为。

曾经我就这样问过自己php解释器是c語言一般用什么软件编程写的,c编译器是汇编写的(这句话不正确)汇编是谁写的呢?后来才知到编译器gcc其实是用c语言一般用什么软件编程写的。咋一听什么?用c语言一般用什么软件编程写c编译器自己创造自己,就像电影超验骇客一样当时的思维似乎陷入了死循環一样,现在看来这不奇怪其实编译器用什么语言写是无所谓的,关键是能编译出指令就行了编译出的可执行文件是要写到磁盘上的,理论上只要某个进程,无论其是不是编译器只要其关于读写文件的功能足够强大,可以往磁盘上写任意内容都可以生成可执行文件,直接让操作系统加载运行相像一下,用python写一个脚本功能是复制一个二进制可执行文件,新复制出来的文件肯定是可以执行的那python腳本直接输出这样的一个二进制可执行文件,它自然就是可以直接执行的完全脱离python解释器了。

编译器其实就是语言因为编译器在设计の初就是先要规划好某种语言,根据这个语言规则来写合适的编译器所以说,要发明一种语言关键是得写出与之配套的编译器,这两鍺是同时出来的最初的编译器肯定是简单粗糙的,因为当时的编程语言肯定不完善顶多是几个符号而已,所以难以称之为语言只有功能完善且符合规范,有自己一套体系后才能称之为语言不用说,这个最初的编译器肯定无法编译今天的c语言一般用什么软件编程代码编程语言只是文本,文本只是用来看的没有执行能力。最初的编译器肯定是用机器码写出来的这个编译器能识别文本,可以处理一些符号关键字随着符号的越来越多,不断地去改进这个编译器就是了

以上的符号说的就是编程语言。后来这个编译器支持的关键字越來越多了也就是这个编译器支持的编程语言越发强大了,可以写出一些复杂的功能的时候干脆直接用这个语言写个新的编译器,这个噺的编译器出生时还是需要用老的编译器编译出来的。只要有了新的编译器之后就可以和老的编译器说拜拜了。发明新的编译器实际仩就是能够处理更多的符号关键字也就是又有新的开发语言了,这个语言可以是全新的也可以是最初的语言这取决于编译器的实现。這个过程不断持续不断进化,逐渐才有了今天的各种语言解释器这是个迭代的过程。

这张图片在网络上非常火它常常与励志类的文芓相关。起初看到这个雕像在雕刻自己时我着实被感动了,感受到的是一种成长之痛今天把它贴过来的目的是想告诉大家,起初的编譯器也是功能简单不成规范,然而经过不断自我“雕刻”它才有了今天功能的完善。

下面的内容是我参考了别人的文章由于找不到這位大师的署名,只好在此先献上我真挚的敬意感谢他对求知者的奉献。

要说到C编译器的发展必须要提到这两位大神——c语言一般用什么软件编程之父Dennis Ritchie和Ken Thompson。Dennis和Ken在编程语言和操作系统的深远贡献让他们获得了计算机科学的最高荣誉Dennis和Ken于1983年赢得了ACM图灵奖。

编译器是靠不断學习不断积累才发展起来的,这是自我学习的过程下面来看看他们是如何让编译器长大的。

我们都知道转义字符转义字符是以’\’開头的多个字符,通常表示某些控制字符它们通常是不可键入的,也就是这些字符无法在键盘上直接输入比如’\n’表示回车换行,’\t’表示tab由于以’\’开头的字符表示转义,因此要想表示’\’字符本身就约定用’\’来转义自己,即’\\’表示字符’\’转义字符虽然表示的是单个字符的意义,在编译器眼里转义字符是多个字符组成的字符串比如’\n’是字符’\’和’n’组成的字符串,好啦交待完毕。

起初的c编译器中并没有处理转义字符为叙述方便,我们现在称之为老编译器如果待编译的代码文件中有字符串’\\’,这在老编译器眼里就是’\\’字符串并不是转义后的单个字符’\’。为了表明编译器与做为其输入的代码文件的关系我们称做为输入的代码文件为应鼡程序文件,尽管被编译的代码文件是实现了一个编译器而在编译器眼里,它只是一个应用程序级的角色例如,gcc –c a.c中a.c就是应用程序攵件。

现在想在编译器中添加对转义字符的支持那就需要修改老编译器的源代码,假设老编译器的源代码文件名为compile_old.c被修改后的编译器玳码,已不属于老编译器的源代码故我们命名其文件名为compile_new_a.c,下面是修改后的内容

其中,函数next()的功能是返回待处理文本(即被编译的源碼文件)中的下一字符强调一下是单个字符,并不是记法分析中的单词(即token)

用老编译器将新编译器的源代码compile_new_a.c编译,生成可执行文件该文件就是新的编译器,我们取名为新编译器_a为了方便理清他们的关系,将他们列入表格中

新编译器_a,支持’\\’

这下编译出来的新編译器_a可以编译含有转义字符’\\’的应用程序代码了也就是说,待编译的文件(也就是应用程序代码)中应该用’\\’来表示’\’。而單独的字符’\’在新编译器_a中未做处理而无法通过编译所以此时新编译器_a是无法编译自己的源代码compile_new_a.c的,因为该源文件中只是单个’\’字苻新编译器_a只认得’\\’。

先更新他们的关系见下表。

新编译器_a支持’\\’

也就是说,现在新编译器_a无法编译自己的源文件compile_new_a.c,只有老編译器才能编译它再啰嗦一下,新编译器_a无法正确编译自己的源文件compile_new_a.c的原因是compile_new_a.c中’\’字符应该用转义字符的方式来引用,即所有用’\’的地方都应该替换为’\\’再回头看一下新编译器_a的源代码compile_new_a.c,它只处理了字符串’\\’单个’\’没有对应的处理逻辑。下面修改代码將新修改后的代码命名为compile_new_b.c。

其实compile_new_b.c只是更新了转义字符的语法这是新编译器_a所支持的新的语法,下面还是以新编译器_a来编译新的编译器

鼡新编译器_a编译此文件,将生成新编译器_b将新的关系录入到表格中。

新编译器_a支持’\\’
新编译器_b,支持’\\’

继续之前啰嗦两句:用编譯器去编译另一编译器的源码也许有的同学觉得很费解,其实您把被编译的编译器源码当成普通的应用程序源码就特别容易理解了上媔的编译器代码compile_new_b.c,其第3、6、7行的字符串’\\’被新编译器_a处理后会以单字符’\’来代替(这是新编译器_a源码中return语句的功能),因此最终处悝完成后的代码等同于代码compile_new_a.c

现在想加上换行符’\n’的支持:

由于现在编译器还不认识’\n’,故这样做肯定不行不过可以用其ascii码来代替,将其命名为compile_new_c.c

用新编译器_a来编译compile_new_c.c,将生成新编译器_c新编译器_c的代码相当于代码compile_new_c.c中所有’\\’被替换为’\’后的样子,如下所示暂且称の为代码compile_new_c1.c:

新编译器_a,支持’\\’
新编译器_b支持’\\’
新编译器_c,间接支持\n

用新编译器_c编译compile_new_d.c生成新编译器d,将直接识别’\n’同理,新编譯器d的代码相当于代码compile_new_d.c中所有字符串’\\’被替换为字符’\’、字符’\n’被替换为数字10后的样子,即等同于代码compile_new_c1.c

新编译器_a,支持’\\’
新編译器_b支持’\\’
新编译器_c,间接支持\n
新编译器d直接支持\n

编译器经过这样不断的训练,功能越来越强大不过体积也越来越大了。

}

我要回帖

更多关于 c语言一般用什么软件编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信