当前位置:  开发笔记 > 编程语言 > 正文

用于学习C程序设计的资源

如何解决《用于学习C程序设计的资源》经验,为你挑选了2个好方法。

来自OO背景(C#/ java)我正在寻找资源来学习如何很好地设计纯C程序.

虽然我熟悉C的语法,并且我可以编写小程序,但我不确定采用更大应用程序的方法,以及采用何种技术.你们可以推荐的任何东西.

编辑:我很高兴完全放弃OO用于C语言编程,我的兴趣是学习如何在没有OO的情况下构建程序,我想学习用C等过程语言设计程序的好方法.



1> ConcernedOfT..:

这篇文章有一个unix书籍列表,其中包括大多数经典的C/Unix作品.对于Windows上的C编程,Petzold的Programming Windows可能是最好的开始.

对于C程序设计,一些unix编程书会告诉你片段,但我不知道"C程序架构"一书.

如果你已经习惯了java,那么C编程的一些技巧是:

    制作 使用 的 堆栈.通常在调用过程时,您需要在调用者的堆栈帧中分配变量,并将指针传递给您要调用的过程.这将比动态分配内存快得多,malloc()并且更不容易出错.在适当的地方这样做.

    C不进行垃圾收集,因此动态分配数据项更加繁琐,您必须跟踪它们以确保它们被释放. 在堆栈上分配的变量(见1)更适用于"惯用".此外,您不必释放它们 - 这是本地变量的奖励.

    (2)的Apropos,考虑一个体系结构,其中您的函数返回状态或错误代码,并使用堆栈按照(1)传入和传出数据.

    了解做什么setjmp()longjmp()做什么.它们对于通用错误处理程序机制非常有用,而不是结构化异常处理功能.

    C不支持例外. 见(3).

    林特是你的朋友. 夹板更加友好.

    了解预处理器的功能以及即使可以,也不应该使用它.

    了解字节序,字对齐,指针算术和其他低级建筑奥秘的细节.与流行观点相反,这些不是火箭科学.如果你感觉很敏锐,可以尝试使用汇编语言,并掌握相关知识.它将帮助您了解C程序中正在发生的事情.

    C没有模块范围的概念,因此请计划使用包含,原型声明以及使用externstatic创建私有范围和导入标识符.

    C语言中的GUI编程在所有 平台上都很繁琐.

    (10)的Apropos学习至少一种脚本语言的C API,例如Tcl,Lua或Python. 在许多情况下,C的最佳用途是作为应用程序的核心高性能引擎,该应用程序基本上是用其他东西编写的.

    构造函数的等价物是初始化函数,您可以在其中传入指向要设置的项目的指针.通常你可以通过调用看起来像这样的函数的形式看到这一点setup_foo(&my_foo).最好将分配与初始化分开,因为您可以使用此函数初始化已在堆栈上分配的项目.类似的原则适用于析构函数.

    大多数人发现匈牙利语符号与匈牙利语一样可读.例外的是匈牙利语母语人士,他们通常会发现匈牙利语符号与楔形文字一样易读..不幸的是,在Windows软件中广泛遇到匈牙利符号,并且整个Win32 API使用它,预期会影响在该平台上编写的软件的易读性.

    C/Unix书籍,即使是非常好的书籍,比如已故的W Richard Stevens所写的书籍,往往可以通过亚马逊市场以非常便宜的价格获得.在没有特定的顺序,得到的副本K&R,史蒂文斯APUE和UNP 1 &2,在龙书, Rochkind, 编程珠玑, 彼佐尔德和里希特(如果使用的是Windows)和任何其他经典的C/Unix的工作.阅读,用铅笔涂鸦,并通常与书籍互动.

    网上有很多很好的C/Unix编程资源.

    阅读并理解C编程的十诫以及关于诫命背后的原因和原因的一些元讨论.这在一定程度上显示了它的年龄,尽管其中大部分仍然是相关的,并且模糊的编译器在嵌入式系统世界中仍然很常见.

    如果你想编写解析器,Lex和Yacc是你的朋友.

    正如Navicore 在下面指出的那样(+1),Hanson的"C接口和实现"是针对模块化架构的接口/实现设计的破败,其中包含大量示例.我实际上已经听过这本书并且听到了很多关于它的好消息,虽然我不能声称已经阅读过它.除了我上面描述的C语言之外,这个概念可以说是良好程序设计的核心.实际上,其他过程语言(如Modula-2)实际上在设计中明确表达了这一概念.这可能是最接近"C程序架构"的书籍.

    阅读C FAQ.


这些肯定是一些很好的要点.我很惊讶看到setjmp和longjmp如此突出地提到了.虽然功能强大,使用这两个应该是非常罕见的,不是吗?如果你认为滥用goto很糟糕(大多数人似乎),想象一下滥用setjmp和longjmp(yikes!).至于我可以补充说,重要的是不仅要编写自己的程序集,还要分析C编译器生成的程序集,以了解真正发生的事情.
在C中没有像Java那样的例外,使用goto实现类似的东西是正确的做法.

2> navicore..:

大卫汉森的"C接口和实现"解决了我从OO回到C的问题.

C接口和实现

说真的,它的方法在避免意外地建造许多非oo系统结束的大型纱线球方面产生了巨大的差异.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有