gpt4 book ai didi

c - 学习 C 程序设计的资源

转载 作者:太空狗 更新时间:2023-10-29 16:18:41 26 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




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

虽然我熟悉 C 的语法,并且我可以编写小程序,但我不确定大型应用程序采用的方法,以及使用什么技术。大家有什么可以推荐的。

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

最佳答案

This posting有一个 UNIX 书籍列表,其中包括大多数经典的 C/Unix 作品。对于 Windows 上的 C 编程,Petzold 的 Programming Windows可能是最好的开始。

对于 C 程序设计,一些 UNIX 编程书籍会告诉您片段,但我不知道有一本“C 程序架构”书籍。

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

  • Make use of stack .通常,当您调用一个过程时,您会希望在调用者的堆栈帧中分配变量并将指向它们的指针传递到您要调用的过程中。这将比使用 malloc() 动态分配内存快得多。并且更不容易出错。在适当的地方执行此操作。
  • C 不做 garbage collection,因此动态分配数据项更加繁琐,您必须将它们跟踪到 make sure they get freed.在堆栈上分配的变量(参见 1)在它们适用的地方更“惯用”。另外,您不必释放它们 - 这是局部变量的一个好处。
  • 关于 (2),考虑一种架构,其中您的函数返回状态或错误代码,并按照 (1) 使用堆栈传入和传出数据。
  • 结识什么 setjmp() longjmp() 做。它们对于替代结构化异常处理功能的通用错误处理程序机制非常有用。
  • C does not support exceptions.见(3)。
  • Lint是你的 friend 。 Splint甚至更友好。
  • 了解什么preprocessor即使可以,也不应该用它做什么。
  • 了解 endian-ness 的来龙去脉, word alignment , pointer arithmetic和其他低级建筑奥秘。与流行观点相反,这些不是火箭科学。如果您感觉敏锐,请尝试涉足汇编语言并获得相关知识。它将对您理解 C 程序中发生的事情大有帮助。
  • C 没有模块范围的概念,所以计划你对包含、原型(prototype)声明和 extern 的使用的使用。和 static 制作私有(private)范围和导入标识符。
  • C 语言的 GUI 编程在 all 上很乏味platforms.
  • (10) 学习至少一种脚本语言的C API 如Tcl , LuaPython.在许多情况下,C 的最佳用途是作为应用程序的核心高性能引擎,而该应用程序实际上是用其他东西编写的。
  • 构造函数的等价物是一个初始化函数,您可以在其中传递指向要设置的项目的指针。通常,您可以通过调用类似 setup_foo(&my_foo) 的函数的形式看到这一点。 .最好将分配与初始化分开,因为您可以使用此函数来初始化您在堆栈上分配的项目。类似的原则适用于析构函数。
  • 大多数人发现 Hungarian notation与书面匈牙利语一样可读。唯一的异常(exception)是母语为匈牙利语的人,他们通常认为匈牙利符号与 Cuneiform. 一样清晰易读。 .不幸的是,匈牙利符号在 Windows 软件中广泛使用,整个 Win32 API 都使用它,这对在该平台上编写的软件的易读性产生了预期的影响。
  • C/Unix 书籍,即使是像已故的 W Richard Stevens 所写的那些非常好的书籍,也往往可以通过亚马逊市场以相当便宜的价格买到二手书。无特定顺序,获取 K&R, 的副本史蒂文斯 APUEUNP 1 & 2, Dragon book, Rochkind, Programming Pearls, PetzoldRichter (如果在 Windows 上工作)和任何其他经典的 C/Unix 工作。阅读,用铅笔在上面涂鸦,通常与书籍互动。
  • 有很多很多不错的C/Unix programming网络上的资源。
  • 阅读并理解 Ten Commandments of C Programming以及一些关于戒律背后的原因和原因的元讨论。这在一定程度上显示了它的年龄,尽管其中大部分仍然相关并且晦涩的编译器仍然quite common in the embedded systems world .
  • Lex and Yacc如果您想编写解析器,请成为您的 friend 。
  • 作为 Navicore points out below (+1) , 汉森 'C Interfaces and Implementations'是一个关于模块化架构的接口(interface)/实现设计的破败,有一堆例子。我实际上听说过这本书并听说过它的好消息,尽管我不能声称已经读过它。除了我上面描述的 C 习语之外,这个概念可以说是良好的程序设计的核心。事实上,其他过程语言(例如 Modula-2)实际上在其设计中明确了这一概念。这可能是最接近打印版“C 程序架构”书籍的内容。
  • 阅读 C FAQ .
  • 关于c - 学习 C 程序设计的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/925754/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com