这几天用C编程了哪些应用程序?

时间:2009-10-07 21:56:28

标签: c programming-languages

当我20年前在大学读书时,C是我们选择的语言,因为当时它几乎是城里唯一的通用编程语言游戏。我们学会了使用C编程。它用于系统编程,数据结构,操作系统以及其他所有内容。基于文本的控制台I / O是与计算机交互的主要方式。图形用户界面很少见,网络编程根本不存在。

向前推进20多年。我们有很多专业的语言。例如,PHP适用于Web编程。用C编写Web应用程序会很疯狂,但同样用PHP进行系统编程也是疯了。

我不再写C了。可以这么说,我已经离开了这个语言的当前行业用途。我知道它用于内核开发,微控制器等。还有什么?

使用C的关键行业是什么,因为它是这项工作的最佳语言?对于哪种应用是C的首选?

19 个答案:

答案 0 :(得分:16)

C最重要的特征之一是它的便携性。在x86上,你几乎拥有所有编程语言,但在其他一些架构中,C通常是除了汇编之外的唯一选择。可移植性的另一个含义是,正如有人指出的那样,大多数其他编程语言都有C绑定。当您拥有C库时,您可以相对轻松地使用Perl或Python API,其速度与本机C库相当。此外,C编译器通常比C ++编译器更强大,更成熟。有人告诉我,这是Linux内核用C语言编写的众多原因之一。

答案 1 :(得分:11)

我使用C进行非系统编程。我的工作与bioinformatics有关。我使用C的原因是因为有很多非常好的C库,而且这些例程都是处理器密集型的。

C也可以轻松绑定到其他语言。因此,您可以在C中构建一个库,并使其适用于C ++,Python,Java,.NET,Ruby,PHP等。反之则并非如此简单。

答案 2 :(得分:8)

为什么人们可能会看到新编写的C代码包括:

  1. 仍然需要访问“裸机”(设备驱动程序等)的代码。
  2. 图书馆例程(请从其他语言调用),其中表现至关重要。
  3. 与现有C代码库的互操作性。
  4. 严重资源限制限制解决方案的环境(例如嵌入式控制器)。
  5. 真的,通用的应用程序代码(特别是在循环中有人的地方)......不是那么多。

答案 3 :(得分:5)

任何接近硬件的设备 - 设备驱动程序和嵌入式系统最为突出。 C的抽象级别有助于提供一些可移植性的东西,但更多的东西会妨碍。

答案 4 :(得分:5)

我现在主要从事Linux工作,而且用C语言而不是C ++或其他东西编写了大量的Linux代码。

Linux内核有很好的理由,就此而言,其他内核如Darwin,各种BSD发行版等等都是用C语言编写的。以下是一些:

  • C经常被称为“便携式汇编语言”。精神上“编译”目标CPU的简单C语句是相当容易的,并想象在指令和寄存器等方面会发生什么。而且你真的希望能够在操作OS内核时这样做。

  • 你可能无法在内核中使用很多库例程,例如malloc()或printf(),因为它们在该上下文中是不安全的。您必须使用特殊的内核等效项。 C ++的问题在于,很多人认为基本的语言特性,比如新的运算符或iostream或堆栈上的自动对象构造,在内核中的默认配置是不安全的。你可能能够破解可以工作的东西,但是坚持使用已知的,有效的解决方案就好了,就是使用C.

  • 代码库已经用C语言编写,将它转换为C ++将是一项巨大的工作。

  • 对于给定的CPU架构,从C生成的代码非常标准化。 C ++不是这样,特别是对于模板和内联函数这样的东西。来自C ++的机器语言非常难以预测,而且一些C ++编译器产生了非常臃肿的代码。这不是你想要的内核,它的代码需要尽可能可预测,快速和小。

Linux中的许多其他“用户空间”功能也是用C语言编写的。我使用的一些组件包括X Windows,GLib / GObject,GDK / GTK,Cairo,Pango和Clutter。所有这些都可以用C ++编写或重写,但在Linux世界中似乎更倾向于使用C语言。

答案 5 :(得分:4)

答案 6 :(得分:4)

嵌入式设备,交易算法,声音处理算法,驱动程序,Linux内核等

答案 7 :(得分:2)

在我目前的角色中,我们通常只在修改遗留系统(VxWorks内核)时编写C代码,或偶尔编写简单工具或程序。

C也非常便携; (几乎)每个操作系统和内核都有一个C编译器 - 所以对于需要这种支持的应用程序,C是可用的最佳选择之一。

C ++被认为通常优于C,但我的理解是在严格的条件下,C编译器是首选 - 低级驱动程序,小型嵌入式系统等条件。

并称我为老式,但我认为C是向新手程序员传授的最佳语言 - PHP,C ++,Java ......这些语法都是C语言 - 我10年前开始学习C语言有信心解决任何编程语言。然后就是所有这些毕业生都不了解内存管理的问题...... :(

答案 8 :(得分:2)

到目前为止,已经有很多好的答案。另一个原因是它是最不常见的分母 - 许多高级语言在C中实现了运行时并支持在C中编写扩展。因此,如果你用C编写一个库,它可以用各种语言提供。如果您使用Java或Python来实现库,则情况并非如此。 GTK + GUI工具包和相关库是用C语言编写的,并考虑到了这一目标。它们被设计成包装并且已经用于大量语言。

因此,一般来说,C不仅适用于仍可跨平台移植的低级代码,而且适用于可在高级语言环境之间移植的代码。

答案 9 :(得分:1)

答案 10 :(得分:1)

机器人。

答案 11 :(得分:1)

游戏,尤其是主机游戏和MMO服务器。

答案 12 :(得分:1)

我所使用的应用程序(一个控制IP摄像机系统的盒子)最初是用C开发的,因为我们最初是为一个非常小的嵌入式系统开发的,而且C ++在uclibc环境中不起作用。

随着时间的推移,我们切换到了custc libc,但应用程序核心保留在C中。有些部分我们可以从面向对象的设计和异常中受益,但我认为语言对我们来说仍然有效。

答案 13 :(得分:1)

机顶盒,数字电视和嵌入式系统仍在使用“C”进行应用程序开发。

答案 14 :(得分:1)

大多数嵌入式系统,HPC应用程序(这里也有很多Fortran),操作系统,许多Unix应用程序(ApacheSendmail都会浮现在脑海中)

大多数其他语言的编译器/解释器也可能包含不同程度的C!

答案 15 :(得分:1)

正如有人指出的那样,C用于接近硬件编程的地方。这是C在许多机器人应用中使用的主要原因之一。有许多交叉编译器允许您使用C进行编码,然后将代码移植到微处理器microcontroller,嵌入式设备甚至DSP processors。甚至还有基于C的特殊语言,如nesC,它们专门用于编程短距离无线传感器。

即使对于重型工业机器人,您会发现低级控制器编程是在C中完成的,然后工程师将Java或C#GUI与广泛的C库进行交互。

答案 16 :(得分:1)

尚未提及的一个主题是速度。虽然许多高级语言编译器做得很好,但是如果你有一个需要运行速度极快的应用程序或者在性能关键环境中多次调用的小型内部循环代码,那么编写良好的C代码通常可以比大多数其他选项更好地完成工作。

答案 17 :(得分:1)

我知道低级别的驱动程序往往是用C语言编写的,因为任何给定指令的前后条件都很简单。我有一个朋友为闪存公司编写低级设备驱动程序,他写的所有代码都在C中。

答案 18 :(得分:0)

C / C ++也用于速度,所以像电子游戏这样的东西仍然是用C / C ++编写的。实时交易应用程序也可能用C语言编写。