5

是否有任何更高的 C 抽象库可以帮助非常轻松地完成基本工作,而无需真正担心内存/指针/等。

例如:Python 提供了比 C 更高的抽象。它可以连接字符串、数组等。简单地说,我们在 C 中有任何库来处理这项工作吗?

4

2 回答 2

6

用 C 编程只有几个目的。想到的主要目的是:

  1. 您需要一种具有存储持续时间概念的语言,从而您可以编写有界空间或就地算法,这些算法使用已经获得的内存,因此绝对没有失败的情况。

  2. 您想利用 C 惯用语的代码大小或性能优势,这些惯用语要么不是惯用的,要么不能用其他语言表达。同样,其中大多数最终都与就地处理数据有关,而不是通过中间数据结构移动数据或将其包装在抽象容器中。

如果你没有这样的需求,或者甚至不知道它们的含义,你可能会考虑你是否真的应该使用 C。将字符串连接、抽象容器类或惰性内存管理等低效习语从其他语言带到C 将否定使用 C 的大部分/所有可能的好处,同时为您提供很少或没有高级语言的好处。

于 2012-09-20T06:05:15.763 回答
4

不担心指针是相当棘手的,因为最终必须有人清理混乱,当东西超出范围时,C 既没有垃圾收集器也没有析构器。

  • Apache Portable Runtime (APR)通过使用内存池使某些形式的内存管理变得更容易。这样你就可以同时释放一堆对象。APR 提供了自己的一组基于池的字符串例程,但是这些字符串仍然被处理为char*,所以你不能真正避免这里的指针。您当然可以做 atypedef char* string并使用该名称。
  • 您还可以获得C 的垃圾收集器,它将更加关注内存管理。这个库本身只会提供一个垃圾收集器,没有别的。我知道没有使用它并提供字符串操作和类似功能的高级 C 库。

您可能想问自己一个重要问题:如果您打算使用其他语言(如 C++)已经提供的功能,为什么要坚持使用 C?也许您的要求也可以通过一些混合语言编程来满足,您可以在其中使用 C++ 编写应用程序的一部分并将现有代码保留在 C 中,或者使用 C 调用约定进行库调用。这样一来,您就可以编写高层次的新代码,并且在适当的地方仍然使用良好的旧 C。

没有人会因为您使用 C++ 而强迫您使用特定的编码风格。编写一个看起来很像 C 程序的程序并在需要的地方仍然使用 C++ 的特性和数据类型是完全可以的。您不必自己编写面向对象的东西,您可以坚持使用标准命令式范例中相互调用的简单函数。但是很高兴知道您可以在那些有助于使您的代码更易于编写、阅读和维护的情况下使用对象。

于 2012-09-20T05:47:39.023 回答