- 浏览: 203687 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (138)
- Linux - Adiministration (4)
- Linux - Shell (3)
- Linux - Programming (10)
- Linux - Miscellaneous (57)
- Theory - Data Structure & Algorithm (2)
- Theory - Fundamentals of Compiling (0)
- Theory - Operating System (0)
- Theory - Database (0)
- Theory - Miscellaneous (0)
- Oracle (16)
- J2SE&J2EE (32)
- 杂项 (8)
- UCM (1)
- English (1)
- 我的超级菜谱 (1)
- Case - J2EE Tutorial (0)
- Case - J2EE架构师之优秀枪手 (10)
- Apache项目学习 (0)
最新评论
-
yaolixing01:
他山界面开发框架 v22是一套基于Gecko v22 的开源收 ...
Firefox Plugin - Gecko SDK/npapi -
chenpeilei2003:
您是这篇博文的原创吗 , 我通篇看完了, 很受教。
学习的目 ...
如何系统地学习linux? -
inprice:
羊蝎子 -
inprice:
...
羊蝎子 -
RobertLeeJesus:
因为我有两台T61
我安装Solaris的全过程。
引言
尽管 C 语言问世已近 30 年,但它的魅力仍未减退。C 语言继续吸引着众多的开发者,他们为了编写、移植或维护应用程序而必须学习新技能。
本文是为了满足对C语言初学者或想提高自身C语言修为的开发人员的需要而写的。希望对您的学习和工作有所帮助。您也许不赞同其中的某些方法,但我们希望您会喜欢其中的一些。
本文不介绍作为一个程序员应掌握得语言细节,而是与初学者分享自己的UNIX 下C语言编程学习经验;也不说明一个合格的编程人员应该掌握的计算机知识,比如:操作系统、数据结构与算法、数据库等等。
不管您出于什么目的,希望您阅读完本文后能留下您的批评或建议。您的中肯的批评会成为作者前进的动力。
工具篇
“公欲善其事,必先利其器”。编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具。
(一) 操作系统
在UNIX或Linux系统中学习C很方便,所以在开始您的学习旅程前请先选择一个UNIX或Linux操作系统。
目前可供个人免费使用的UNIX或Linux系统有FreeBSD、RedHat Linux、SUSE Linux等,而且在安装包中还提供很多实用的工具,如:gcc, make等。
如果您一直使用Windows ,身边又没有多余的机器安装UNIX,则可以使用VMware,通过VMware安装虚拟系统。
(二) 编译工具
目前绝大多数Unix或Lnux系统都提供CC或GCC编译器,最简单的cc命令格式如下:
cc -o hello hello.c
在unix shell环境中敲入上面的代码会将hello.c程序编译成可执行文件hello。
make 工具如 GNU make、System V make 和 Berkeley make 是用来组织应用程序编译过程的基本工具,但是每个 make 工具之间又有所不同。
大部分UNIX和Linux程序都是通过运行make来编译的。make工具会读取一个包含指令的文件(这个文件的名字通常都是 makefile 或 Makefile,不过后文中我们统一称之为 “makefile”),并执行各种操作来编译程序
(三) 调试工具
最简单的调试工具:为你的程序添加打印语句
在你对程序的运行机制有了一定的了解后,你可以实用一些工具帮助你进行调试,当然你得学习一下这些工具得使用,如:dbx,gdb等。
还有一些内存工具可以帮你查找内存泄漏或缓冲区溢出等一些问题,如:memwatch,yamd等
(四) 其他工具
1.vi或vim
Unix下文本编辑器。主要靠一堆命令来编辑文本文件,学Unix编程最好熟悉并熟练使用vi编辑器。
当然在实际工作中,你可能需要一个集成编码环境或一个功能强大的图形化编辑工具。
提供一个中文的vim在线手册:linux .org/">http://vcd.gro.clinux .org/
2.netterm
最著名的网络终端软件之一,可以使用它方便的连接到主机系统中。
3.Secure shell
一个支持ssh协议 得客户端工具,多数情况下用来连接linux系统。
书籍篇
“书是人类进步得阶梯”。学习一门新的知识,当然要选择几本适合自己得书籍,下面介绍一些我自己学习C语言使用过的书籍:
1.《C primer plus》
推荐理由:适合作为入门书和基本函数查询得参考资料。本书最新版为第五版,以ANSI C99为标准详细介绍了C语言。
2.《The C programming_Language》
推荐理由:C语言之父得作品权威性毋庸置疑。虽然书籍出版时间比较老,好像也没更新,不过仍不失为经典书籍,网上有这本书得英文电子版提供下载 。
3.《C 专家编程》
推荐理由:本书可以帮助有一定经验的C程序员成为C编程方面的专家,最关键的是本书寓教于乐,让你充分享受编程的乐趣。
4.《C缺陷与陷阱》
推荐理由:书中所揭示的知识能帮助您绕过C语言自身得陷阱和缺陷,减少代码中许多常见的Bug。
5.《unix环境高级编程》
推荐理由:既然是UNIX环境下C编程,就不得不说说UNIX编程书籍。Stevens先生的《unix环境高级编程》是我竭力推荐的,也是我 的案头必备(如果对网络编程有兴趣的,可以学习一下Stevens先生的《UNIX网络编程》两卷,如果觉得还不过瘾,可以再看看《TCP/IP详解》三 卷)。
6.《计算机编程艺术》
推荐理由:算法大师得呕心沥血之作。计划出版五卷书,目前好像已出版3卷。对算法有兴趣得可以研究一下。
过程篇
1. 学习C语法
语法的学习对于一个具有编程底子的来说,就很轻松了;即使你以前没有学习过其他编程语言,我相信有2个星期,你也能轻松搞定。
需要注意的是,不要太纠缠于语言的细节,比如:运算符优先级与结合性的问题等。
2. 学习C标准库
ANSI C库把函数分为不同的组,每个组都具有与之相关的头文件。C语言标准库相对于其他语言,比如C++ ,Java 来说是非常短小精悍的,但首先应着重对以下库进行学习:
ctype.h:字符处理
math.h:数学库
stdio.h:标准I/O库
stdlib.h:通用工具库
string.h:字符串处理
time.h:时间和日期
如果想了解完成的ANSI C库,你可以购买相关的书籍,这些书籍一般会详细介绍每个函数的用户和一些注意点;当然你也可以登陆http://www.dinkumware.com/manual …… amp;page=index.html获取ANSI C库详细信息。
3.攻克C的难点
C语言声明:
C语言的声明确实让我觉得恐怖,比较晦涩难懂,而且声明的形式和使用的形式还类似。比如如下的声明恐怕就连很多熟悉C多年的程序员也不是一眼就能看出来的:
char * const * (*next)();
那么有没有一种好的记忆方法或规则来搞清楚呢,好像没有,如果有的话也不是这样折磨人了。不过可以看看《C专家编程》第三章的内容,或许你会有所收获。也只能多学多练了,所谓熟能生巧嘛,希望这个问题不要在你的心灵上留下阴影。
数组与指针:
数组与指针的关系,在标准中并没有作很详细的规定,而且好多C入门的书籍在这个问题上并没有给出很详细的说明,所以会给人造成很多误解。
对于这个问题,你可以参考《C缺陷与陷阱》4.5节和《C专家编程》第4,9,10章,相信你这里面的内容搞透彻,以后就不会再被这个问题搞迷惑。
指针与内存:
如果你以后编写规模较大的程序,你可能发现这个问题可能会是你最大的烦恼,而且可能会是你消耗最多调试时间的事项。
C版本的问题:
你得特别小心该问题,最好不要在你的程序中混合使用不同版本C的特性,否则会给你带来很迷惑的问题。如果一定要用,你最好清楚自己在做什么。
还有一些其他C中的难点和容易错误的地方,可以学习前人的一些经验。以下是一个c FAQ的链接地址,相信在这篇文档中有你需要的大部分问题的解决方法。
http://c-faq-chn.sourceforge.net/
4.UNIX环境编程
学习了以上内容之后,我相信,你就可以进行unix环境编程了。不过你可能需要对操作系统理论有一点点的了解,这样学起来会比较轻松一些。
Unix环境编程,你应该着重IO和进程两大块内容。《Unix环境高级编程》中对Unix环境编程有着非常详细且深入的论述,而且书中有大量实用性例子程序,不过可能得花上几个月得时间,好好啃一啃了。
在扎实掌握以上内容,不代表你得C语言学习支路已经完成,相反,才刚刚开始。以后你需要用学到得知识去解决大量不同实际问题,在不断得实践过程中,你会近一步加深对C的理解。有了以上基础之后,你会发现,在实践过程中需要的其他知识,你会非常快速的掌握。
方法篇
编程是一个实践性很强的工作,最好的学习方法就是边看书边调试代码,把书上的例子程序反复的修改调试运行,从中得到自己的体会。 在自己的学习或工作中写的一些测试的程序,要分门别类的保存下来,在以后的实际工作中不断的整理,日积月累就是一个很好资源库了。
有时候,可能会觉得书上的例子作为理解概念时比较通俗易懂,但实用价值不高。所以要提高自己的编程能力,你还需要学习别人的代码,我认为研究别人的代码是提高自己实际编程能力最好且最快的途径,现在网络上有很多价值很高的开源代码可供你选择学习。
最后,不得不提到的一个问题就是,千万不要让自己淹没在各种技术细节的海洋中,比如前缀++运算符问题,表达式计算优先级问题等。
学习UNIX下C编程也好,还是其他编程语言,我们最后的目标都是为了使用计算机解决现实中的问题,所以积累日常工作中常见问题的解决方法,并 形成一定的范式,做一些提炼才是最重要的。说到底,设计和编程所做的事情,就是方法论,不管你是无意识还是有意识的,所以一定要注重积累。
补充说明
1. 对于有人问是否需要一份ANSI C99标准,对于一般开发人员,并没有必要,且不说其语言晦涩难懂,即使你能从头到尾学习一遍,我想对你的编程也没有什么提高。
2. 目前多数UNIX操作系统所带的cc、gcc等编译器好像并不支持 C99 的所有新特性,不过现在已经有足够多的新特性普遍可用,因此有理由开始认真考虑在新的开发中采用 C99 特性,尤其是用在它们使得效率或清晰度本质上发生变化的那些地方(比如以内联函数代替宏替换)。
3. 编程规范的问题:一般较为正规的软件公司都会有自己的一套完成的编程规范,那么你遵守就好;如果你是自己学习的话,可以选择一个较为通用的规范,最好的方法就是看别人是怎么写代码的。
发表评论
-
Replace text in file
2009-06-09 21:53 866Windows @echo off if ... -
cpio
2009-06-08 15:31 1061Extract cpio -i </ ... -
Start to use svn
2009-04-14 15:18 817http://artis.imag.fr/~Xavier.De ... -
Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍
2009-03-11 00:46 1451原文 http://www.linuxsir.or ... -
Solaris Compiz Desktop Effect doesn't work.
2009-03-01 23:34 829When I enable the Solaris Deskt ... -
How to make a process run after the user logs out?
2009-01-04 18:05 874nohup nohup sort sales.dat ... -
进行有效编辑的七种习惯(vim)
2008-12-16 11:52 1066如果你的很多时间是用 ... -
Miscelaneous Tricks to use the Linux Command Line
2008-12-10 14:29 8511. The process name for Linux e ... -
How to map remote network drive
2008-12-09 15:29 8481. sudo apt-get install smbfs ... -
Install the SSH server - openssh-server
2008-12-09 15:24 1064sudo apt-get install openssh-se ... -
Ubuntu系统目录结构
2008-12-09 08:52 1093Ubuntu系统目录结构 ================== ... -
Ubuntu APT Proxy
2008-11-22 14:43 1097When I use ubuntu desktop in VM ... -
Ubuntu 8.10 + T61 nvidia 显卡驱动(特效)(compiz)不好用
2008-11-16 20:30 21011. System -> Administration ... -
multiple disks, multiple partitions, multiple OS
2008-10-31 22:39 14001. 基本知识 一块硬盘可以有1-3个主分区和1个扩展 ... -
Ubuntu 8.10 + T61中间小红钮不好用
2008-10-31 20:11 10701. Edit /etc/X11/xorg.conf, a ... -
Common compress command.
2008-10-31 11:51 961zip -r dest.zip source unzip -d ... -
How to see how much is a folder or a file?
2008-10-31 11:41 751du -sh -
How to decide what Linux is installed?
2008-10-31 11:34 728vi /proc/version -
Adding a startup script to be run at bootup
2008-10-30 21:30 1303Ubuntu 1. sudo vi /etc/init ... -
如何删除老版本的Ubuntu内核
2008-10-28 16:49 909sudo aptitude purge ~ilinux-im ...
相关推荐
【Unix C学习指南】这篇资料主要面向C语言初学者,特别是那些在Unix环境下进行编程的人。C语言以其高效、灵活性和广泛的应用性,一直是程序员喜爱的编程语言。本指南旨在分享Unix下的C语言编程经验,而不是深入讲解...
《Unix-Linux编程实践教程》是一本专门为初学者设计的指南,旨在帮助读者掌握Unix和Linux操作系统的基础知识以及编程技能。教程内容全面,涵盖了从基本的命令行操作到高级的系统编程,对于想要深入理解这两种操作...
在探讨"C语言学习资料"这一主题时,我们深入解析C语言的基础、应用以及学习资源,旨在为初学者和进阶者提供全面而深入的理解。C语言作为一种通用且强大的编程语言,自1972年由Dennis Ritchie在贝尔实验室开发以来,...
这两本书提供了详细的API介绍和实例,可以帮助你理解和掌握C语言在Linux/Unix环境下的应用,包括系统调用、库函数、调试技巧等。 最后,"UNIX环境高级编程中文版.pdf"为不熟悉英文阅读的读者提供了一种语言上的便利...
- **官方文档**:推荐阅读Unix和Linux官方文档中有关Socket编程的部分。 - **书籍推荐**:《UNIX网络编程》(Stevens & Rago)、《TCP/IP详解》(Comer)等经典著作提供了深入的Socket编程知识。 - **在线资源**:...
这本书虽然名为“恨者指南”,但实际上,它为理解和学习UNIX提供了宝贵的见解,尤其是在对比其他操作系统时。UNIX作为一款历史悠久的操作系统,其设计理念、命令行工具和编程接口在IT领域有着深远的影响。 UNIX手册...
无论读者是刚接触Linux的新手,还是有经验的UNIX程序员,本书都能提供深入的指导和实用的参考信息。通过大量的实例代码,读者可以更加深刻地理解编程思想和技巧,并将这些知识应用到实际的编程工作中去。
它是许多操作系统和应用程序的基础,如Linux、Unix和各种嵌入式系统。C语言程序设计的核心概念包括变量、数据类型、运算符、控制结构(如if语句和循环)、函数、指针以及内存管理等。 在这个经典教程中,新手可以...
Mingw32的编译器遵循POSIX标准,使得移植Unix或Linux下的开源软件到Windows变得更加容易。 **迷你编译器特性** 1. **小巧便捷**:迷你编译器ctestcode因其小巧的体积,易于下载和安装,且对系统资源占用少,使得它...
更重要的是,Linux继承了Unix的优秀传统,并在此基础上不断进化,使得早期学习的Unix知识和技术至今仍具有很高的价值。相比之下,Windows等其他操作系统平台的变化较快,新旧技术更迭频繁,导致用户的学习成本较高。...
《UNIX环境高级编程》(第二版中文) 是一本经典的IT技术书籍,主要涵盖了在Linux/Unix操作系统环境下进行高级系统编程的各个方面。这本书是为那些希望深入理解操作系统内核与应用程序交互,以及如何有效地利用系统...
2. **《鸟哥的Linux私房菜》** - 这是一本适合初学者的Linux指南,涵盖了基础操作、用户管理、文件系统、网络配置等内容,让新手能快速上手Linux环境。 3. **《Unix和Linux系统管理手册》** - 本书详细介绍了系统...
在IT领域,学习不同的计算机语言是提升技能的关键。这份名为"各类计算机语言学习书籍推荐ppt"的资源...无论你是新手还是希望扩展技能的开发者,这个PPT资源包都值得一看,它将指引你在编程的世界中找到合适的学习路径。