`
xpp02
  • 浏览: 1047860 次
社区版块
存档分类
最新评论

linux系统C语言学习总结

 
阅读更多

引言

  尽管 C 语言问世已近 30 年,但它的魅力仍未减退。C 语言继续吸引着众多的开发者,他们为了编写、移植或维护应用程序而必须学习新技能。

  本文是为了满足对C语言初学者或想提高自身C语言修为的开发人员的需要而写的。希望对您的学习和工作有所帮助。您也许不赞同其中的某些方法,但我们希望您会喜欢其中的一些。

  本文不介绍作为一个程序员应掌握得语言细节,而是与初学者分享自己的UNIX 下C语言编程学习经验;也不说明一个合格的编程人员应该掌握的计算机知识,比如:操作系统、数据结构与算法、数据库等等。

  不管您出于什么目的,希望您阅读完本文后能留下您的批评或建议。您的中肯的批评会成为作者前进的动力。

工具篇

  “公欲善其事,必先利其器”。编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具。

  (一) 操作系统

  在UNIX或Linux系统中学习C很方便,所以在开始您的学习旅程前请先选择一个UNIX或Linux操作系统。

  目前可供个人免费使用的UNIX或Linux系统有FreeBSD、CentOS、Ubuntu、SUSE Linux等,如果你以前没有接触过UNIX或Linux选择Ubuntu还是比较好,因为它的软件非常丰富,当然了如果你想以后一直在Linux工作学习建议选择CentOS,而且在安装包中还提供很多实用的工具,如: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(vim是vi的升级版)

  Unix下文本编辑器。主要靠一堆命令来编辑文本文件,学Unix编程最好熟悉并熟练使用vi编辑器。

  当然在实际工作中,你可能需要一个集成编码环境或一个功能强大的图形化编辑工具。

  提供一个中文的vim在线手册:http://www.slideshare.net/kinghom/vim-1922665

  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库,你可以购买相关的书籍,这些书籍一般会详细介绍每个函数的用户和一些注意点。

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

分享到:
评论

相关推荐

    linux下c语言学习

    Linux系统提供了大量的头文件供程序员使用,例如 `<stdio.h>`、`<stdlib.h>` 等。 **系统调用** 是操作系统提供的接口,允许用户程序请求内核服务。常用的系统调用包括文件操作、进程控制等。例如,打开文件的系统...

    linux操作系统下c语言编程入门,经典总结

    ### Linux操作系统下C语言编程入门:经典总结 在IT领域,尤其是软件开发中,Linux操作系统与C语言结合,成为了一种极为重要的技能组合。本文旨在深入解析Linux环境下C语言编程的关键知识点,涵盖从基础概念到高级...

    Linux程序员— C语言

    总的来说,这个资源包为Linux程序员提供了一个全面的C语言学习平台,不仅涵盖了理论知识,还有丰富的实践素材。通过系统地学习和实践,学习者不仅可以掌握C语言的基础,还能深入了解Linux环境下的系统编程,为成为...

    linux下C语言开发笔记整理

    Linux下C语言开发笔记整理涵盖了从基础知识到网络通信的多个方面,主要围绕在Unix/Linux系统环境下使用C语言进行软件开发的各项技术与理论。以下是从文件提供的信息中提炼的知识点。 ### Unix/Linux系统基本命令和...

    必备Linux命令和C语言基础

    这种实践导向的学习方法有助于巩固知识,为后续的嵌入式开发、Linux系统编程或其他C语言相关项目奠定坚实基础。 总结起来,"必备Linux命令和C语言基础"这个课程旨在提供一个全面的入门指南,帮助学习者掌握在Linux...

    Linux下C语言版本的贪吃蛇游戏源码

    ### Linux下C语言版本的贪吃蛇游戏源码解析 #### 概述 本文将详细介绍一个基于Linux环境下的C语言实现的贪吃蛇游戏。该程序利用了`curses`库来实现终端上的图形界面,并提供了游戏逻辑和用户交互功能。通过本篇...

    c语言学习,很好的总结资料。

    ### C语言学习精粹知识点概览 #### 一、C/C++语言struct深层探索 - **struct的巨大作用**:在大型C/C++程序中,`struct`被广泛用于数据组合,将逻辑上属于同一整体的数据封装在一起。这不仅提高了代码的可读性和可...

    Linux下C语言编程之经验总结

    综上所述,学习Linux下的C语言编程涵盖了广泛的知识点,包括基本的C语言编程技巧、系统调用的使用、进程管理、进程通信以及文件和信号处理。这些内容对于提升系统级编程能力,开发高效、稳定的Linux应用程序具有极其...

    Linux操作系统C语言编程入门

    总结来说,"Linux操作系统C语言编程入门"涵盖了从基本的C语言语法到Linux系统编程的各个方面,包括文件操作、进程控制、内存管理、错误处理、线程编程以及调试技巧。通过深入学习这些知识点,你将能够熟练地在Linux...

    c语言学习总结.doc

    1. **编辑器**:在Linux系统中,常用的编辑器是vi,它分为命令行模式、插入模式和底行模式。在命令行模式下,你可以进行删除、复制等操作;在插入模式下,你可以编辑文本;底行模式则用于保存和退出编辑器。vi的基本...

    Linux基础C语言编程

    在深入探讨Linux基础C语言编程之前,让我们先理解一下这些关键词的含义。Linux是一种开源操作系统,以其稳定性、安全性...通过深入学习和实践,你将能够熟练地在Linux系统上编写和管理C程序,进一步提升你的编程能力。

    Linux平台上学C语言

    ### Linux平台上学习C语言的关键知识点 #### 一、C语言入门 **1.1 程序的基本概念** - **程序与编程语言**: 计算机程序是由一系列指令组成的,这些指令告诉计算机如何执行特定的任务。C语言是一种高级编程语言,它...

    c语言linux系统编程入门

    ### C语言Linux系统编程入门知识点概述 #### 一、Linux下的C语言编程基础 ##### 1. 源程序的编译 - **GCC编译器**: 在Linux环境下,使用GCC(GNU Compiler Collection)作为主要的编译工具。GCC不仅支持C语言,还...

    嵌入式Linux下C语言编程应用程序开发详解【完整篇】 0

    通过本章的学习,您不仅能够熟悉嵌入式Linux的基础知识和发展历程,还能够掌握在Linux系统中进行基本操作的能力,为后续章节中更深入的C语言编程打下坚实的基础。下一章我们将进一步探讨如何在嵌入式Linux环境中设置...

    linux 下C语言编程

    #### 三、Linux系统编程 1. **文件I/O操作**: - 文件打开/关闭(`open`, `close`) - 文件读写(`read`, `write`) - 文件定位(`lseek`) 2. **进程管理**: - 进程创建(`fork`, `vfork`) - 进程等待(`...

    C Programming in Linux Linux下C语言

    根据提供的信息,我们可以总结出以下关于《Linux下的C语言编程》的相关知识点: ### 一、简介 本书由David Haskins编写,详细介绍了在Linux环境下进行C语言编程的基础与高级技巧。作者通过丰富的实例和深入浅出的...

    Linux操作系统下C语言编程入门

    总结来说,Linux操作系统下学习C语言编程能够提供一个理想的实践平台,通过深入理解操作系统和编程语言,你可以更好地掌握计算机工作原理,并开发出高效、可靠的软件。通过阅读"Linux操作系统下C语言编程入门.pdf"这...

    我是这样学习Linux下C语言编程的

    14. **阅读和理解Linux内核源码**:虽然对初学者来说可能难度较大,但阅读开源项目(如简单的Linux工具)的C代码可以帮助理解C语言和Linux系统编程的结合。 15. **在线资源**:利用在线资源,如Stack Overflow、...

Global site tag (gtag.js) - Google Analytics