C语言,我学到指针的第一章节,后面还有不少关于指针的知识点,对于之前我所学过的C语言语法细节与实现原理方面我自己认为还是比较深入和扎实的了。但是我今天有个决定,我想先暂停C语言关于指针后续章节的学习,而是用现在所学的知识在算法和数据结构中灵活运用下后再在合适的时候补充学习完C语言。因为我想C语言就像是一门功夫,我之前学得很快,但是我只是懂得那些招式是什么样子的,会起到什么作用,但是我还没有运用这些招式杀死过一个坏蛋,嘿嘿!

  嗯!现在开始我们一起学习用之前的C语言知识去解决一些有趣的问题吧!

  这里我要说明下,今天开始我换了1个学习环境,操作系统是ubuntu11.4.IDE也从以前的vc6.0换成了现在emacs.编译器换成了gcc.调试器也换成了gdb.哇!都换了,会不会不习惯啊!是啊!对于这样的一堆东西,我一无所知,但是我们有激情啊!对于未知的东西我们有好奇心与毅力!哇!这样我想绝对够啦!

为什么要换环境呢?!

  我在网上搜寻到很多程序员对linux,emacs,gcc,gdb都有一种宗教反应。提升到了信仰的高度。至于为什么对于我这个暂时的局外人不得而知,但是从他们如痴如醉的情景中不免让我感到好奇!似乎有一种无法解释的魔力让我要去了解它,或者这样能看到另外一个世界。反正我们是初学者,反正我们是年轻的孩子!嘿嘿!

一:ubuntu11.4,emacs,gcc,gdb的安装

  关于它们的安装我搜寻了下网络,很多的中文资料,只要一步步的安装上面的说明进行安装很容易的,安装时间大概是20分钟左右。

二:emacs的基础操作

  现在我们面对的是编辑器之神!可见这家伙不容易驯服!要驾驭好它可能需要一辈子的时间!但是我们要搞清楚为什么它会是编译器之中的王者,所以我们得接近它。与神并肩是不是感觉很过瘾啊!嘿嘿!

1.emacs的样子

 

哇!大家有没有觉得它好酷啊!但是东西都占满了屏幕,怎么再出来啊!晕,感觉什么键都不起作用。晕!我强行关机,我重新启动机器再查询如何退出再继续学习! 

  我现在重新启动好啦!原来emacs的退出是:C-X C-c.大家是不是看不明白这个是什么意思啊。这里有个知识点呢!

Emacs击键约定

emacs中的描述用于定义操作的击键如下:

C-<chr> == Ctrl + 字符,同时按。
M-<chr> == Meta + 字符,同时按。

郁闷啊!我在我的键盘上找了遍都没有发现Meta建呀!哦!原来Meta是一个专用键,它可能是Alt键!它也可以是你系统所用的键盘映射表中不存在的键。比如也可以这样:按 Esc 键,再按后面的字符键(而不是一起按)。这样产生的结果和 M-<chr> 相同。哦!现在我知道这个原理后,我再重新启动emacs,但是再试试退出,哇!真的退出来了。

Emacs打开或新建文件

C-x C-f 这个命令就可以打开1个文件,如果没有则会新建一个文件。

  好呢!现在我们就用它新建一个文件:C-x C-f后输入123.c哈哈!真的新建了1个文件啦!现在我在里面写个helloworld。

哈哈!太好了!helloworld!写完啦!现在我们再退出,还记得用什么键吗?!

然后我们再打开123.c文件,再多写了1点点代码。如果这个时候你想退出的话,emacs会给你一条警告信息:

Save file /home/bilbrey/practice1.txt? (y, n, !, ., q,
C
-r or C-h)

因为我们又多打了点代码上去,所以emacs会问你是否要修改啊,还是直接退出算啦!这时,如何你输入y则修改会保存,如何按!就直接退出了,就不保存我们多写的那点代码啦!如果我们担心停电造成代码丢失,我们可以按C-x C-s保存当前代码但是不退出可以继续书写代码!哇!这个不错啊,不怕停电啦!删除字符可以用使用 Delete 键或 Backspace 键.

emacs中编译C程序

现在呢!我们要编译这个hellowrold程序啦!输入 M-x compile,于是,在小缓冲区中出现这样的提示符:Compile command:,后面可能还有缺省值,我们先把缺省值去掉(至于为什么我想以后我会知道的,因为我发现不删除缺省值编译会出错)。我输入 gcc -o hello hello.c 并按 Enter。一个编译窗口被打开,它包含如下的文本:

哈哈!编译成功啦!但是有1个警告!我得再仔细看看!唉!粗心啊!头文件忘记写啦!加上后就没有警告啦!

emacs中运行C程序

我们在Emacs 中运行它:M-! ~/hello。在小缓冲区中,我的输出是:“hello, world!”

第一个算法的学习:猜价格游戏

  这里有个题目:一件价格在999元以内的商品,参与者要猜出这件商品的价格。在猜的过程中,主持人会根据参与者给出的价格,相应的给出“高了”或者“低了”的提示。

二分法猜价格:

  我们可以首先猜500,这样就排除了1半,如果高了,我们就猜250.如何低了我们就猜750.这样下去,我们就能在最短的竞猜次数中猜中商品的价格。

嘿嘿!第一个算法的学习我们知道怎么做啦,那么我们一起去在emacs里代码了啊!(我发现个问题啊,我见别人的emacs不是这样黑乎乎的啊!我搜寻了网络发现了答案,我之前的emacs是字符界面里的,要图形界面的得用startx启动图形界面啦!)

嘿嘿!然后安装刚才helloworld的编译方式编译,运行!一起正常(第一次写算法,我觉得肯定我写的代码比较丑陋啦!慢慢来了啦!)

在emacs中用gdb调试猜价格游戏程序

  我们迈出了第一步能在emacs中写程序并运行了,但是这里还差一小步,就是调试了。调试我们用gdb.

  要使程序能被gdb调试,需要在编译时加入调试所需的信息。如果使用gcc进行编译,需要使用参数-g,如:

gcc -g -o hello 123.c

开启emacs的GDB调试

  我们输入M-x gdb就进入了调试模式啦!如图:

但是这个时候我们看不见代码了,我要看见代码的话启动GDB多窗口模式。使用命令M-x gdb-many-windows 多窗口模式如下:

总结一下:命令gdb 功能:启动gdb进行调试

       命令gdb_many-windows 功能:切换单窗格/多窗格模式

       命令gdb-restore-windows 功能:恢复窗格布局

由于我今天也是第一次学啦!所以我会在我陆续2个月左右的学习中逐步记录emacs中使用gdb调试算法的学习过程!今天我先看几个简单的gdb功能。

list指令(简写为l):这个命令的作用是从第一行开始列出源码:

直接回车是表示,重复上一条命令。

现在我们已经列出源码啦!现在我们去看看如何设置断点。我们在源码的29行设置1个断点并查看断点信息。

使用命令:break 29 ;查看断点信息命令:info break 如图:

运行程序命令:run 我们输入一个数为oldprice赋值,并停在断点处查看oldprice的值(打印变量值是用p 变量名)。如图:

继续运行命令:c  退出gdb命令:q 。

今天的总结:今天我学会了如何安装linux系统以及linux程序,学会了启动emacs,打开编辑文件,退出emacs,emacs中编译C程序,用gdb调试C程序。当然这一切都是那么的简单啦!因为刚刚开始嘛!加油!每天都努力的学习哦!