对三个数进行排序的C语言源代码,为什么在有的pl0编译器源代码分析上可以用,有的pl0编译器源代码分析不可以用,是我写错了吗

c语言的三个数大小排列代码,到编译出来的却可以输入四个数字,为什么呢??_百度知道
c语言的三个数大小排列代码,到编译出来的却可以输入四个数字,为什么呢??
//c.hiphotos.baidu.baidu&nbsp.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="/zhidao/wh%3D450%2C600/sign=0ebd41a43c292df17056//zhidao/wh%3D600%2C800/sign=67a91eeaf5deb48ffb3ca9d8c02fd72ae3b5ab5b9cb.hiphotos:///zhidao/pic/item/d8f9d72ae3b5ab5b9cb://c.jpg" esrc="<a href="http
提问者采纳
把后面那个空格去掉
哥哥,那个空格,渣渣不懂
scanf,最后一个%d后面的空格
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
其他类似问题
为您推荐:
c语言的相关知识
其他1条回答
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言的问题分数: 1 在以下对 C 语言的描述中,正确的是 _____。选择一个答案
A. C 语言函数既可以嵌套定义,又可以递归调用。
B. C 语言中有调用关系的所有函数都必须放在同一源程序文件中。
C. 函数必须有返回值,否则不能使用函数。
D. 在 C 语言中调用函数时,只能将实参的值传递给形参,形参的值不能传递给实参。
选DA. 函数不准许嵌套定义,就是不准许函数里面定义函数B. 不必须。只要再调用前,申明这个函数,或者调用前,定义这个函数就行,貌似C还有很多其他规则。这些情况,都可以不放在同一个文件中。C.可以使用void类型,没有返回值。D.确实不能把形参传给实参,实参传给形参值后,函数内部,实参是不可见的,可见的只是实参的“替代品”——形参。
为您推荐:
扫描下载二维码今天看啥 热点:
GCC编译器使用,gcc编译器一、GCC简介
通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。同时,在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。GCC之所以被广泛采用,是因为它能支持各种不同的目标体系结构。例如,它既支持基于宿主的开发(简单讲就是要为某平台编译程序,就在该平台上编译),也支持交叉编译(即在A平台上编译的程序是供平台B使用的)。目前,GCC支持的体系结构有四十余种,常见的有X86系列、Arm、PowerPC等。同时,GCC还能运行在不同的操作系统上,如Linux、Solaris、Windows等。
除了上面讲的之外,GCC除了支持C语言,还支持多种其他语言,例如C++、Ada、Java、Objective-C、FORTRAN、Pascal、go等。
GCC的安装:
Ubuntu等基于Debian发行版Linux可以使用如下命令安装:
apt -get install gcc
Fedora等基于RPM发行版Linux可以使用如下命令安装:
yum install gcc
使用如下命令查看gcc的版本:
gcc --version
本文地址:/archimedes/p/linux-gcc.html,转载请注明源地址。
二、程序的编译过程
对于GUN编译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如下图所示:
从功能上分,预处理、编译、汇编是三个不同的阶段,但GCC的实际操作上,它可以把这三个步骤合并为一个步骤来执行。下面以C语言为例来谈一下不同阶段的输入和输出情况。
GCC编译器的基本选项如下表:
预处理后即停止,不进行编译、汇编及连接
编译后即停止,不进行汇编及连接
编译或汇编源文件,但不进行连接
指定输出文件file
在预处理阶段,输入的是C语言的源文件,通常为*.c。它们通常带有.h之类头文件的包含文件。这个阶段主要处理源文件中的#ifdef、 #include和#define命令。该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,因为基本上用不到;若非要生成这种文件不可,可以利用下面的示例命令:
test.c -o test.i
在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s 。这个阶段对应的GCC命令如下所示:
gcc -S test.i -o test.s
在汇编阶段,将输入的汇编文件*.s转换成机器语言*.o。这个阶段对应的GCC命令如下所示:
gcc -c test.s -o test.o
最后,在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这一步骤,可以利用下面的示例命令完成:
gcc test.o -o test
运行如下:
可以通过:cat -n [filename]命令查看每一个阶段的文件内容
上面介绍了GCC编译过程的四个阶段以及相应的命令。下面我们进一步介绍常用的GCC的模式。
三、警告选项
GCC提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告
GCC的编译器警告选项如下表:
启用所有警告信息
在发生警告时取消编译操作,即将警告看作是错误
禁用所有警告信息
实例1:给出一段代码,使用gcc进行编译,同时开启警告信息(test1.c)
#include&stdio.h&
int main()
for(i = 0; i &= 3; i++)
printf("hello gcc!\n");
//return 0;
使用-Wall开启警告:
从上面可以看出,GCC给出了警告信息,意思是main函数的返回值被声明为int,但是没有返回值,GCC并不是简单的发出警告,会中断整个编译过程
如果不想看到警告信息,可以使用-w来禁止所有的警告。
此外,GCC还提供了许多以-W开头的选项,允许用户指定输出某个特定的警告,例如:
-Wcomment:出现注释嵌套时发出警告。
-Wconversion:如果程序中存在隐式类型转换,则发出警告。
-Wformat:检查printf和scanf等格式化输入输出函数的格式字符串和参数类型的匹配情况,如果发现不匹配则发出警告。
-Winline:如果函数不能被内联,则发出警告。
-Wlong-long:如果使用了long long型数据,则发出警告。
-Wmain:如果main函数的返回类型不是int型,或者调用main函数时使用的参数数目不正确,则发出警告。
-Wmissing-declarations:如果定义了全局函数,但却没有在头文件中声明,则发出警告。
-Wparentheses:在某些情况下,如果忽略掉了括号,则会发出警告。
-Wreturn-type:如果函数定义了返回类型,而默认类型是int型,编译器会发出警告。
-Wuninitialized:如果使用的自动变量没有被初始化,则发出警告。
-Wundef:如果在#if宏中使用了未定义的变量做判断,则发出警告。
-Wunused:如果声明的变量或static型函数没有使用,则发出警告。
实例2:给出一段代码,使用gcc进行编译,同时开启警告信息(test2.c)
#include&stdio.h&
int main( )
int a = 1;
int b = 0;
int c = 1;
if(a && b || c)
if(a == 1)
if(b == 1)
printf("b = 1\n");
printf("b != 1\n");
使用-Wparentheses开启警告:
四、优化选项
GCC具有优化代码的功能,主要的优化选项包括如下:
-O0:不进行优化处理。
-O或-O1:进行基本的优化,这些优化在大多数情况下都会使程序执行得更快。
-O2:除了完成-O1级别的优化外,还要一些额外的调整工作,如处理器指令调度等,这是GNU发布软件的默认优化级别。&
-O3:除了完成-O2级别的优化外,还进行循环的展开以及其他一些与处理器特性相关的优化工作。
-Os:生成最小的可执行文件,主要用于在嵌入式领域。
一般来说,优化级别越高,生成可执行文件的运行速度也越快,但消耗在编译上的时间就越长,因此在开发的时候最好不要使用优化选项,到软件发行或开发结束的时候才考虑对最终生成的代码进行优化。
-finline-functions:允许编译器将一些简单的函数在其调用处展开。
-funswitch-loops:将循环体中值不改变的变量移到循环体外。
实例:给出一段代码,使用gcc进行编译,同时比较优化前后执行程序所花的时间(test3.c)
#include&stdio.h&
int main()
for(i = 0; i & 100000; i++) {
for(j = j & 0; j--) {
运行后的结果如下:
可以看到,优化的效果十分的显著
dir??在WINDOWS下面用的?gcc是一个编译器,不是编辑器,而不是调试工具...初始的话,直接gcc X.c吧.调试使用gdb.&#47;&#47;X.cgcc -g -otest.exe X.c
&#47;&#47;-o是编译后的可执行文件名,-g是加入调试信息,这样就可以使用gdb调试了.gdb test.exe&gdb& r
&#47;&#47;之后就是使用gdb的命令了,r运行,b设断点,l(list)是列出源码,q退出,w查看某个变量上面的勉强足够用于新学的吧.
Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。 Gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面我们来介绍gcc所遵循的部分约定规则。 .c为后缀的文件,C语言源代码文件; .a为后缀的文件,是由目标文件构成的档案库文件; .C,.cc或.cxx 为后缀的文件,是C++源代码文件; .h为后缀的文件,是程序所包含的头文件; .i 为后缀的文件,是已经预处理过的C源代码文件; .ii为后缀的文件,是已经预处理过的C++源代码文件; .m为后缀的文件,是Objective-C源代码文件; .o为后缀的文件,是编译后的目标文件; .s为后缀的文件,是汇编语言源代码文件; .S为后缀的文件,是经过预编译的汇编语言源代码文件。 Gcc的执行过程 虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。 命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。 Gcc的基本用法和选项 在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。Gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。 Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。 -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。 -O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。 -O2,比-O更好的优化编译、连接,当然整个编译......余下全文>>
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&
Linux教程最近更新谁帮我看一下代码有什么问题_百度知道
谁帮我看一下代码有什么问题
提问者采纳
Red Hat对Linux就是这样做的)、Apache(Web服务器)。“已编译”意味着开发人员创建的实际程序代码(称为源代码)已经由一个称为编译器的特殊程序进行过处理:  程序必须免费发布(但可以是出售的软件包中的一部分,同时可以控制其特定产品具有的质量和功能,人们几乎不可能知道开发人员究竟是如何创建程序的各个部分的。1991年,源代码相当于代码,Mozilla(Netscape浏览器核心)。对于大多数企业而言。这正是1994年成立的Red Hat Software创建“Official Red Hat Linux”并销售这一通常是“免费”的软件的原因。  除了Linux以外,而且事实上鼓励人们修改或定制,是这些软件缺乏质量担保和技术支持,请参见C语言入门教程),应用程序将会更加完善。  下面让我们看一个开放源代码软件的真实例子,还有其他几家公司将Linux打包(通常带有其他软件)以进行转售,于1994年发布了Linux的1。其中,并称之为Linux,该程序将源代码转换为计算机可以理解的格式(有关编译器的详细信息。  软件开发行业所定义的开放源代码软件必须满足一定的条件。现代程序语言中、标准化和通用性。Red Hat向软件包添加的主要价值是质量担保和技术支持。除了Red Hat以外,通过允许感兴趣的人修改源代码。  开放源代码软件恰恰相反,技术支持承诺成为促使其购买Linux而不是免费下载它的一个关键因素,但最为常用格式是文本文件。源代码随已编译的版本一起提供,芬兰赫尔辛基大学的学生李纳斯·托沃兹(Linus Torvalds)基于Unix的衍生版本Minix开发了一个新的操作系统  代码就是程序员用开发工具所支持的语言写出来的源文件。因为该软件的许可证鼓励修改和定制,托沃兹从其他程序员那里收到了这些修改后的版本、便于识别与记忆,许多用户是独立的程序员。  那些想要使用开放源代码软件的最终用户的一个共同顾虑。  许可证不得要求排除其他软件或干预其他软件的运行。大多数商业软件制造商都将这一点视为有利条件,他们对托沃兹提供的源代码进行了修改、力求短小与格式统一以及容易修改等。  必须允许任何人修改源代码。全球各地的人下载并开始使用Linux,并将许多改动结合到基础版本中。支持开放源代码概念的软件开发人员相信,源代码可以书籍或磁带形式出现,这种典型格式的目的是为了编译出计算机程序,它由通过编译器完成.0版。  可以重新发布修改后的版本、PERL(Web脚本语言)和 PNG(图形文件格式)都是非常受欢迎的基于开放源代码的软件,例如在下面的例子中。修改大多数应用程序的已编译版本都是极其困难的。计算机源代码最终目的是将人类可读文本翻译成为计算机可执行的二进制指令,并且在很长时间内不会出现错误。 源代码是代码的分支。托沃兹使用GNU通用公共许可证(它为开放源代码软件提供了很好的法律定义)发布了0。  您购买或下载的大多数软件只提供已编译的可运行版本.02版本的Linux,某种意义上来说、可扩充性与稳定性。在接下来的3年中,以防止其他公司复制自己的代码并将其用在竞争产品中,是一组由字符。  必须提供源代码、符号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括唯一确定性,所以几乎无法提供支持,这种过程叫编译
来自团队:
其他类似问题
为您推荐:
其他1条回答
答案:我在大雪里什么也看不情楚,却觉得好美。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁第一个 C 语言编译器是用什么语言编写的?_知识号
说三道四 最新新闻话题新闻专题评论
> 新闻内容
第一个 C 语言编译器是用什么语言编写的?
是汇编么?编程语言C(编程语言)编译器张秋怡,写代码真是一件有意思的事情参考DennisM.Ritchie写的TheDevelopmentoftheCLanguage:Chistory,C语言诞生的基本过程就是KenThomson不满意BCPL,于是设计了B语言,并且用BCPL为B语言写了一个编译器,然后从这个编译器开,
是汇编么?编程语言C(编程语言)编译器张秋怡,写代码真是一件有意思的事情参考 Dennis M. Ritchie 写的 The Development of the C Language:Chistory,C 语言诞生的基本过程就是 Ken Thomson 不满意 BCPL,于是设计了 B 语言,并且用 BCPL 为 B 语言写了一个编译器,然后从这个编译器开始自举写新的 B 语言编译器。贝尔实验室的众人在 PDP-7 上用 B 语言写了各种各样的东西后又不满意 B 语言了,于是 1971 年 DMR 开始在新买的 PDP-11 上用 B 给 B 写扩展,称之为 NB (new B,此处省略吐槽若干),扩展着扩展着离 B 的画风越来越远了,就取了一个新名字变成了一门新语言—— C 语言。 1973 年夏天他们用手头的编译器和语言给 PDP-11 重写了一个 Unix Kernel。C 语言大约就是这个时期成型的。所以,可以说第一个 C 语言的编译器是用 B 语言,或者说是扩展过的 B 语言(NB)写的。因为是一边改进语言一边用改进了的编译器这样滚雪球写出来的,也可以看成是 C 语言写的?毕竟 DMR 也说了,很难确定什么时候 C 自己变成了一门新语言……Primeval C: two very early compilers 就放出了贝尔实验室里第一代 C 编译器的两个版本(talk is cheap, show me the code? :D),这个时候(72年左右)后缀已经是 .c 了,还有部分 PDP-11 的汇编。主要分成两部分,第一步从源代码生成 AST 写进一个 intermediate representation,第二步从上一步生成的 AST 通过查表生成 PDP-11 的汇编,然后还有一些处理 PDP-11 平台细节的汇编代码。lexer 和 parser(递归下降)都是手写的(http://cm./cm/cs/who/dmr/prestruct-c/c00.c)。wsying,尘世中一个迷途小书童C语言的原型ALGOL 60语言。(也称为A语言) 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。 1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。 而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。所以,最早的C语言编译器使用B语言写的。理论上来讲,用什么语言都可以,C\C++\JAVA\ruby等等熊熊机器生汇编,汇编生B,B生C,C生万物。知乎用户,++C用Beta版的C语言编译器编译的朱光穆,又笨又傻萌萌哒又来打Belleve脸了。How was the first compiler written?assembly - How was the first C compiler written ?Sky Wang,美好事物爱好者第一个C语言编译器应该是用汇编写的,但是第一个成熟的C语言编译器应该是由汇编和C语言共同写的。
编译原理讲到了“自举编译器”。大意就是先用底层语言(应该是汇编)写一个能运行,但效率极低的C语言编译器(底层语言不好优化),有了C语言的编译器以后,就可以用C语言好好写一个编译器了,用之前那个运行没问题,但效率低得编译器编译一下,就得到了可以使用的编译器了。知乎用户,业余「Hello, world!」写手其實,最早的fortran的編譯器是直接編寫出來的,但是後面algo,pascal之類的語言以來的編譯器都不是編寫出來的,而是由文法處理器根據語言的文法描述生成的。當時的文法處理器估計主要採用PDP-11的匯編語言編寫。畢竟到80年代,CMU和MIT allab的人都還熱衷與PDP-10的匯編程序編寫。但也不排除AT&T用它們的Fortran編譯器完成文法處理器。我覺得可以給現在在谷歌任職的Rob Pike寫一封禮貌得體的信詢問他是否還記得AT&T當時的文法處理器的使用情況。杜小豆,写程序,写代码,写软件是B语言么?请移步另一个问题:C编译器用什么语言写的http://www./question/20369232/answer/
浏览:41发布: 10:40:15
浏览:33发布: 21:14:27
浏览:23发布: 15:52:39
浏览:14发布: 12:22:36
浏览:34发布: 13:29:37
浏览:24发布: 12:14:36
浏览:28发布: 14:26:45
浏览:40发布: 11:12:17
浏览:33发布: 2:17:56
浏览:14发布: 15:27:49}

我要回帖

更多关于 sram编译器源代码 的文章

更多推荐

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

点击添加站长微信