`

unix c学习指南

阅读更多

引言
尽管 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在线手册: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.        编程规范的问题:一般较为正规的软件公司都会有自己的一套完成的编程规范,那么你遵守就好;如果你是自己学习的话,可以选择一个较为通用的规范,最好的方法就是看别人是怎么写代码的。

分享到:
评论

相关推荐

    Unix C学习指南

    不错的unix下c编程指南

    Unix和Linux下C语言学习指南.docx

    Unix和Linux下C语言学习指南.docx

    Unix和Linux下C语言学习指南

    本文不介绍作为一个程序员应掌握得语言细节,而是与初学者分享自己的UNIX下C语言编程学习经验。文中列出了笔者学习C语言编程常常用到的软件和工具,介绍一些自己学习C语言使用过的书籍。介绍了编程是一个实践性很强...

    UNIX平台下C语言高级编程指南.pdf

    UNIX C语言 编程 包括:多线程等几乎涵盖了全部的UNIX C语言编程的知识,希望大家共同学习 不求多要分,评价奉献

    Unix平台下的C语言高级编程指南

    一般介绍unix下用C语言编程的好书,同时也是一本学习unix编程和系统原理的好书。

    高级UNIX编程 pdf 电子书

    本书适合广大UNIX和c程序员、研究人员、高校相关专业师生学习和参考。 目录 出版者的话 专家指导委员会 译者序 前言 第1章 基本概念 1.1 UNIX和Linux一览 1.2 UNIX的版本 1.3 使用系统调用 1.4 错误处理 1.5 UNIX...

    ccna学习指南 chinapub 高清版

    高清pdf版,ccna学习指南。 目 录 序言 前言 第1章 网络互连介绍 1 1.1 认证目标1.01:网络互连模型 1 1.1.1 网络的发展 2 1.1.2 OSI模型 2 1.1.3 封装 3 1.2 认证目标1.02:物理层和数据链路层 4 1.2.1 ...

    《UNIX编程环境》(The UNIX Programming Envirment)(Brian W.Kernighan, Rob Pike)英文原版[PDF]

    本书对UNIX操作系统的编程环境做了详细而深入的讨论,内容包括UNIX的文件系统、Shell、过滤程序、I/O编程、系统调用等,并对UNIX中的程序开发方法做了有针对性的指导。本书内容深入浅出,实例丰富,无论是UNIX系统的...

    CCNA学习指南.rar

    学习IP配置;Novell IPX协议栈、IPX封装类型和SAP及RIP的配置;使用访问表进行基本的通信量管理;默认的局域网连网,跨域配置VLAN。 在每一章中,均有针对认证目标的详细说明、有关认证的总结信息、2分钟练习和自我...

    嵌入式工程师学习的手册.7z

    ARM指令集,C++标准库,C函数速查,C语言参考手册,...V2.0,STM32F4芯片手册,STM32F103芯片中文教程及参考手册,STM32F429开发指南-HAL库版本_V1.1,STM32库函数使用手册的中文翻译版,UnixC函数,UNIX-C函数速查。

    CCNA学习指南-绝对有用

    目 录 序言 前言 第1章 网络互连介绍 1 1.1 认证目标1.01:网络互连模型 1 1.1.1 网络的发展 2 1.1.2 OSI模型 2 1.1.3 封装 3 1.2 认证目标1.02:物理层和...4.5.1 UNIX 97 ...附录C 关于Web站点 300 词汇表 301

    CCNA学习指南

    学习IP配置;Novell IPX协议栈、IPX封装类型和SAP及RIP的配置;使用访问表进行基本的通信量管理;默认的局域网连网,跨域配置VLAN。 在每一章中,均有针对认证目标的详细说明、有关认证的总结信息、2分钟练习和自我...

    打包工具 Ant 学习指南

    Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。 Ant就不同了。与基于shell命令的扩展模式不同,Ant用Java的类来扩展。

    高质量C++-C编程指南

    file:///D|/My Documents/学习/高质量C++-C编程指南.txt[2008-11-11 21:48:26] 2.4 对齐... 18 2.5 长行拆分... 19 2.6 修饰符的位置... 19 2.7 注释... 20 2.8 类的版式... 21 第3章 命名规则... 22 3.1 共性规则.....

    高质量C C编程指南

    这是C语言学习不错的文档,第1章 文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 定义文件的结构 1.4 头文件的作用 1.5 目录结构 第2章 程序的版式 2.1 空行 2.2 代码行 2.3 代码行内的空格 2.4 对齐 2.5 长行...

    学习嵌入式系统书籍推荐

    1、《Linux与Unix Shell 编程指南》 C语言基础 1、《C Primer Plus,5th Edition》【美】Stephen Prata 2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)

    《你必须知道的495个C语言问题》

    《你必须知道的495个C语言问题》结构清晰,讲解透彻,是各高校相关专业C语言课程很好的教学参考书,也是各层次C程序员的优秀实践指南。 -----------------------------------------------------------------------...

    C程序设计语言(第2版·新版中文)

    他参加了UNIX系统、C语言、AWK语言和许多其他系统的开发,同时出版了许多在计算机领域具有影响的著作,如《The C Proguamming Language》、《The Elementsof Programming Style》等。 推荐资源 C# 编程实例与技巧 ...

    CCNA学习指南(pdf).zip

    目 录 序言 前言 第1章 网络互连介绍 1 1.1 认证目标1.01:网络互连模型 1 1.1.1 网络的发展 2 1.1.2 OSI模型 2 1.1.3 封装 3 1.2 认证目标1.02:物理层和...4.5.1 UNIX 97 ...附录C 关于Web站点 300 词汇表 301

Global site tag (gtag.js) - Google Analytics