ubuntu下C语言编译环境的构建与使用
------------------------------------相信很多人都装了Ubuntu版Linux使用了吧,昨天装的8.04,配了一个下午,解决了很多问题,现在说一下C语言学习环境的创建与使用,第一次发关于Linux的帖子,有什么不足之处请大家多提建议,呵呵。。
------------------------
1.平台搭建
LInux下如果单纯是进行C编译环境搭建的话,是比较容易实现的,因为系统内置了编译器gcc,所以我们要做的只不过是写好c源文件然后在进行编译就可以了
如果没有gcc编译器的话,使用以下命令获取
[color=YellowGreen] ~# sudo apt-get install gcc[/color]
同时要下载辅助工具
[color=YellowGreen] ~# sudo apt-get install binutils
[color=Black]
头文件库[/color]
[/color][color=YellowGreen] ~# sudo apt-get install [/color][color=YellowGreen]Llibc6-dev
[color=Black]
除了gcc外,建议新手再安装以下的帮助文件,如果在编程过程中遇到什么问题的话可以参考这些文档
C[/color] [/color]Library (用来查询语法使用方式的文档)
[color=YellowGreen][color=YellowGreen] ~# sudo apt-get install[/color][/color][color=YellowGreen] glibc-doc[/color]
Linux下C语言编程参考文档
[color=YellowGreen] ~# sudo apt-get install[/color][color=YellowGreen] glibc-doc-referenc[/color]
函数的用法说明文档
[color=YellowGreen] ~# sudo apt-get install[/color][color=YellowGreen] manpages-dev[/color]
用来连接多个源文件生成的目标文件的程序make
[color=YellowGreen] ~# sudo apt-get install[/color][color=YellowGreen] make[/color]
make程序的使用说明文档
[color=YellowGreen] ~# sudo apt-get install[/color][color=YellowGreen] make-doc[/color]
安装了以上的说明文档后,大家在编程中如果遇到什么问题 可以使用man命令查询帮助文档,例如:
[color=YellowGreen]~# man getch[/color]
[color=YellowGreen]~# man make[/color]
查看完帮助后,按q退出文档
关于用什么写源代码,我个人推荐使用kate,经过简单的设置之后,kate能满足编写C语言的需求,且其诸多功能也为编写与检查源文件中的错误提供了很多便利(比如颜色标记,显示行好,自动折叠等)
安装方法:
[color=YellowGreen]# sudo apt-get install kate[/color]
-----------------------
2.程序编写、编译与运行
安装好之后,你可以在应用程序>其他里找到Kate,打开后在工具菜单的语法加亮和缩进中设置成c样式,然后就可以写自己的C程序了,如:
[color=MediumTurquoise]#include <stdio.h>[/color]
[color=MediumTurquoise]int main(int argc, char **argv)[/color]
[color=MediumTurquoise]{[/color]
[color=MediumTurquoise] system("clear");[/color]
[color=MediumTurquoise] printf("Hello World!\n");[/color]
[color=MediumTurquoise] return 0;[/color]
[color=MediumTurquoise]}[/color]
输入完程序后用ctrl+S保存,我这里假设保存路径为/home/user1/桌面/helloworld/hello.c
然后就是编译,打开终端,进入目录
[color=YellowGreen]# cd /home/user1/桌面/helloworld/[/color]
然后用gcc进行编译
[color=YellowGreen]# gcc -Wall hello.c[/color]
gcc会显示编译过程中发现的问题于错误,若无错误出现则会编译成文件a.out
运行程序(a.out为编译生成的文件)
[color=YellowGreen]# ./a.out[/color]
这时候屏幕会显示
[color=YellowGreen]Hello World![/color]
[color=YellowGreen]~#[/color]
表示编译运行成功
[color=Plum]-------------------[/color]
[color=DarkOrchid]其它说明:ubuntu8.04默认不支持getch(),getchar();gets()等函数,如果大家想使用则需要安装curses库文件[/color]
[color=DarkOrchid]# sudo apt-get install libncurses5-dbg[/color]
[color=DarkOrchid]# sudo apt-get isntall libncurses5-dev[/color]
[color=DarkOrchid]并且在写源代码时要加上[/color]
[color=DarkOrchid]#include<curses.h>[/color]
[color=DarkOrchid]或者在用gcc编译时加上-lcurses参数,例如:[/color]
[color=DarkOrchid]# gcc -Wall ./hello.c -lcurses[/color]
[color=DarkOrchid]就可以使用getch等函数了[/color]
[color=DarkOrchid]注意:getch函数在linux控制台下无法起到暂停程序的作用,大家可以用getchar替代getch实现这个功能[/color]
[color=RoyalBlue]--------------------------
小技巧:[/color]
[color=RoyalBlue]如果编写一个比较大的程序,需要很长时间完成的话,大家可以建立一个启动器,以便快速方便的进行编译,比如你要花很多天编写一个源程序,就可以在桌面上建立一个启动器,指向c程序所在的目录,起动器命令如下(这里以C源程序在/home/user1/桌面/hello/目录下为例)[/color]
[color=RoyalBlue]gnome-terminal --working-directory=/home/user1/桌面/hello/[/color]
[color=RoyalBlue]以后每次进行编译时打开此起动器,就可以直接使用gcc对源程序文件名进行编译而无需输入很长的路径了[/color]
~[color=YellowGreen]# gcc -Wall hello.c
~#./a.out
[/color]
至此,ubuntu下的程序编写与运行就说完了,需要注意的是,虽然同为c语言,但是gcc编译器于大家经常用的turboC和VC还有一些不同,希望大家在使用时候能参考帮助文档,再进行使用
这里还有一篇关于环境搭建的,贴给大家看看
[url=http://bbs.linuxpk.com/redirect.php?fid=69&tid=6502&goto=nextnewset]http://bbs.linuxpk.com/redirect.php?fid=69&tid=6502&goto=nextnewset[/url]
再截两张图给大家看看,show下自己刚装的ubuntu8.04
[url=http://tu.6.cn/pic/show/id/324017][img]http://i3.6.cn/cvbnm/41/aa/e2/5575c21c7cd17a0995975cce4bc36064.jpg[/img][/url]
[url=http://tu.6.cn/pic/show/id/324018][img]http://i3.6.cn/cvbnm/df/e0/70/c601248412ab870cf026323b8f1c663f.jpg[/img][/url]
[[i] 本帖最后由 lostworld|g.y 于 2008-8-13 21:08 编辑 [/i]] 帅!!!哈哈:emot-19 Good!
--------------
运行
~# gcc -Wall hello.c
编译的程序应该为
~# ./a.out 呵呵,失误,马上改一下 原创啊,没有人帮忙加下精啊~~~ GOOD~
:emot-16 你的机子好啊~
我用的虚拟机只能给他分配256M内存
不敢玩得这么炫~ 补充说明一下上文的一个BUG,关于getch和getchar函数的,还有一个是关于scanf的供大家参考
以下内容来自womking的BLOG [url]http://womking.bokee.com/[/url]
getch&getchar:
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).getchar函数的返回值是用户输入的第一个字符的ASCII码.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCII码.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.getch要有#include "conio.h"的头文件。
还有一个函数getche(),与getch相似,只是它回显获得的字符到屏幕上。
by:womking
scanf的两个特殊应用
1.空格作为scanf的参数
在程序员后面的皇后问题源程序中有这样一段代码
要注意我加上去的注释部分
if(k==n)/*找到一个解*/
{
printf("列\t行);
for(i=1;j<=n;j++)
printf("%3d\t%d\n",j,col[j]);
printf("enter a character(Q/q for exit)!\n");
scanf(" %c",&awn);/*注意这里scanf中的空格*/
if(awn==`Q`||awn==`q`)exit(0);
}
.
想必大家都能知道这段代码的功能,也就是说如果用户没有输入退出的条件(q或者Q)那么程序会将下一个皇后解都打出来,直到出现Q/q或者全部解输出完为止,问题就出在这里,scanf里面为什么要有一个空格呢?如果没有运行会是:当输入非退出条件会连续输出两个解,这是为什么?原因就在scanf。
空格在scanf函数中是一个参数,我们都知道c语言的输入输出流有三种(stdio,stdin,stderr),scanf函数是在键盘缓冲区取数据,当我们输入的数据在屏幕上显示的时候,实际上数据还在键盘缓冲区,当用户输入回车键的时候计算机会把缓冲区的数据(包括回车)输入到内存供程序的执行。而参 数%c是接受字符的,当他遇到回车scanf也能正常接收。
假设现在scanf没有空格
分析:现在我们再来看看我们的程序:假设 现在输入y继续执行程序函数scanf正确接收到了y,循环继续,但是下一个字符应该是回车,scanf函数循环接收到的回车!=q/Q,这样循环又继续 一次此时没有数据,那么计算机就等待用户输入数据。就这样用户输入一个数据就会出现两次,这是我们程序员不希望看到的。
解决:解决就是在%c的前面加上一个空格,空格是一个参数,它可以在scanf接收数据之前屏蔽回车(\n),这样就能达到我们的预想效果。
2.输入特定字符集
scanf("%[]",str)可以实现只读入中括号[]中的字符,遇到非指定的字符就停止输入。
例如,scanf("%[0-9]",str);只读入0-9的数字,遇到其它字符返回。scanf("%[^\n]",str),读入回车符外的所有字符,用此语句可以实现输入带空格的字符串。 [quote]原帖由 [i]feeling4t[/i] 于 2008-8-15 17:40 发表 [url=http://www.xiyoubbs.com/redirect.php?goto=findpost&pid=147900&ptid=25757][img]http://www.xiyoubbs.com/images/common/back.gif[/img][/url]
你的机子好啊~
我用的虚拟机只能给他分配256M内存
不敢玩得这么炫~ [/quote]
诶,别提了,昨晚从Intel官网下了一个驱动包,编译失败(有个文件叫什么××× so.3.7.1的我一直没找到,有弄不清在那个lib库里面),我把intel的驱动弄坏了,现在开不了任何特效,只得干瞪眼。。
(应该是驱动的问题,xorg,conf和compiz都没有任何问题)
回复 8# lostworld|g.y 的帖子
在for循环中 scanf("%*c%c",&awn); %*c也可以跳过后面的回车符。 写的不错,顶一下!!页:
[1]

