【问题标题】:Relearning C: New idioms? [closed]重新学习 C:新习语? [关闭]
【发布时间】:2012-03-04 22:17:30
【问题描述】:

自从 2000 年左右就没有接触过 C 之后,我正在重新学习它。从那时起我就一直在使用 Ruby,我发现了一个我从来不知道存在的编程习语的整个世界。

在过去十年中出现了哪些重要的 C 技术、书籍、习语等(如果有的话)?我知道 C99 和 C11 标准,但我还应该去哪里寻找?还是在 OOP 和 FP 已成为常态的情况下,C 风格仍然保持不变?

【问题讨论】:

  • 这是一个很难回答的问题。我不记得 10 年前的编程是什么样的了!
  • 我不确定这是否是 constructive... 不过这个问题很有趣,所以我没有标记。
  • 指定初始化程序可能是 C99 中最重要的发展。
  • for循环内声明,如:for (int i = 0; i < 100; i++) /* ... */;
  • 我建议以更通用的格式重写问题,“过去 10 年 C 语言发生了什么”,然后将其发布到 programmers.stackexchange.com。它可能会在那里受到更热烈的欢迎。

标签: c idioms


【解决方案1】:

C 不支持 在语言级别 仅支持过程式编程 - 这是一个精确的选择,因为它生来主要是一个“可移植程序集”,并且它被用来紧密地工作尽可能地连接到机器上(不借助组装)。 大多数汇编语言在编程范式方面并没有提供更多的东西,而不是堆栈和函数调用语句(有些微甚至没有)——这就是 C 的模型。

毕竟,C++ 和 Objective C 的诞生是有原因的:C 必须保持其设计理念,并添加更多抽象的东西,人们不得不实际 fork 语言。

话虽如此,没有什么能阻止你写作,例如C 中的 OO 代码 - 实际上,很多人都这样做(我会说它是 C 中最流行的习语之一),但您不必为此期望几乎任何语法糖:您必须使用 @ 987654321@s 用于数据、用于“模拟”方法的“普通”函数、用于继承的组合、用于多态性的指针表等等。不过,我不知道这是否算作“过去十年”的成语,它的使用时间已经很久了。

【讨论】:

  • 这就是它的伟大之处。不包括反模式。或图案。只是自己创建的工具。
  • @JosephLeBrech:在 C++ 和 Python 之间切换我自己看到的一个项目,当你需要用它的模式和现成的东西来试验一种更快的语言时,这是一个很好的选择,但是当你有要使其运行快速和/或构建完全适合您的需求的解决方案,通常最好是一种无需强制任何东西即可为您提供工具的语言。像往常一样,选择正确的工具取决于您要做什么。
  • @Joseph:但是,它缺少尾调用优化保证等功能,从而有效地阻止您实现某些类型的模式。
  • @NiklasB.:嗯,过去 20 年中几乎所有体面的 C 编译器都实现了尾调用优化;不过,有趣的是,在过去的二十年里,几乎所有高级语言都是用 C 编写的——这告诉你可以用 C 构建所有高级语言- 虽然有时你必须实现一种全新的语言。 :)
  • 每一种新语言似乎都犯了同样的错误,即实施当时流行的反模式,而不是仅仅创建经过试验和测试的设计模式作为其语言的一部分。即便如此,某些模式也很容易实现,而无需成为语言中的关键字,应该避免实现这些模式。
【解决方案2】:

它因文化而异,而且它的进化程度确实不如我使用的其他语言。我看过:

  • 更多类型安全
  • 更好的工具
  • 32/64 位兼容代码和固定宽度类型
  • 库,尤其是 POSIX
  • 更面向对象

并不是每个点都完全是新的习语——就构建和处理程序的方式而言,这些是源代码级别的一些更明显的变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多