2011年的C编程


19

许多个月前,我削减了C代码为生,主要是在维护支持各种操作系统(Linux,* BSD,HPUX,VMS等)的POP3服务器的同时。

我计划通过使用C语言编写简单的FORTH来提高我的C语言技能,并学习一些有关语言实现的知识。

但是我想知道自2000年以来C世界中的事情如何(或是否发生了变化)。当我想到C时,我认为...

  1. comp.lang.c
  2. 尽可能使用ANSI C(但C89和C99并未得到广泛支持)
  3. gcc -Wall -ansi -pedantic 代替静态分析工具
  4. 埃马克斯
  5. 标签
  6. Autoconf + make(有关VMS,HP-UX等优点,请参见第2点)

在过去的11年中一直用C编写的任何人都可以让我知道这些年来发生了什么变化(如果有的话,-)。

(在其他新闻中,我已经做了十多年了)。



3
好吧,这里有vi而不是emacs,但我不会去那里。如果有人仍然发布到comp.lang.c,甚至混淆的C竞赛也停滞不前(www0.us.ioccc.org/main.html),我会感到惊讶。悲惨的时刻-下一个新竞赛是争夺混淆的字母字符串,这些字母拼写出一些短信短语,哈哈。
杰伊·埃尔斯顿

Answers:


10

我真的很难回想起“哇,十年前的C编程是什么?”这样的时光,但是我可以谈论一些我知道自己在做不同的事情。

  • 尽管您通常仍然可以在comp.lang.c上召唤像Peter Seebach这样的人来帮助您解决一个可能与语言有关的特别愚蠢的错误,但是大多数(如果不是全部)C编程问题都可以在Stack Overflow上获得出色的答案。

  • 静态分析仍然有些痛苦。夹板(至少据我所知)不能很好地处理C99,因此覆盖图仍然很难可视化。GCC警告已经“改善”了很多(用引号引起来,因为这取决于您询问的人)。

  • Valgrind是所有内存错误检查器的圣贤,通常会向您指出代码中的问题,而这些问题是静态分析工具无法/无法找到的。它不是100%完美,但我认为不可能如此。这些天,我很少需要接触GDB,这对我来说(没什么私人的)都很好。Valgrind地块工具也是一个非常好的堆分析器。

  • GCC中总是有新的扩展,其中有些是微妙的,因此,如果可移植性是一个大问题,那么-pedantic是个好主意。对于新手/生锈的程序员,有时很容易将扩展名与“隐藏”语言功能混为一谈。

  • CCAN出现了(想想CPAN,但对于C而言),并且开始起飞。那里有很多有用的宝石,包括TAP的改编,它是一个了不起的测试工具。C语言中的字符串仍然很烂,但是在过去十年中,帮助处理它们的库的数量和质量确实有所增加。

  • SCons和CMake在构建配置中越来越受欢迎。Autoconf / Automake / Libtool仍被广泛使用,但是许多人对M4感到有些局限。不过,如果这是您要使用的系统,则Autoconf宏存档仍然有效。

  • 今天显然有更多的编辑器可用。在使用C时,我还没有找到一个不会妨碍我的“ IDE”,但这可能是因为我是一个老的,笨拙的Sanka饮酒布道者,以简化工作。

不过,总的来说,我不会说生活(就C语言而言)与10年前几乎没有太大的不同。但是,在许多方面,它实际上要容易一些。但是,很难将其归因于工具而不是经验。


15

glib可能是“新标准库”。它提供了许多标准所不具备的功能-与平台无关的线程和网络,容器数据结构等。当然,它并非在所有地方都适用,但是如果您可以使用它,则可以节省大量时间。


我认为您对GNU C库(GLibC)感到困惑
Lekensteyn

7
不,我不感到困惑。
zvrba 2011年

1
这是一个非常有效的答案,我不确定为什么它被否决了。glib的产生源于许多人对Ulrich Drepper的沮丧以及glibc的“保护”程度。
Tim Post

1
不过,现在Glib已与GNOME完全分离。我并不是在讨论这种关联,只是实际上可以完全忽略GNOME甚至GTK +。有(很多?)命令行和非交互程序编写在其中。
2011年

3
我喜欢称glib为“ C的STL”
Cercerilla 2011年

4
  1. StackOverflow ;)
  2. 我主要使用C来为Microchip的微控制器编写固件,并且由于它们的编译器基于GCC,所以我使用C99(但我对其他功能并没有多大兴趣,主要是为了限制循环变量和堆栈上的动态数组的范围)。在编写Python扩展时,我坚持使用C89,以防有人需要使用MSVC对其进行编译。我不知道其他人使用什么。
  3. 夹板(上C89,C99不工作),以及锵的静态分析仪 -虽然,因为他们两人在宏观沉重的固件代码呛,我没有一个大规模的与他们的经验量。实际上,对于LL极客来说,LLVM的许多内容都非常有趣。
  4. 好吧,这只是神圣的战争诱饵:P
  5. 从未使用过Ctags,但我偏爱Doxygen。
  6. 上帝,我讨厌Autoconf。我好讨厌 我从未尝试过从头开始制作Autoconf泥浆球。如果一个项目已经有了一个项目,那么我最终将废除所有已经存在的项目。如果我正在写新的东西,我会大声疾呼,寻找替代品,尽管如果发现一个我会坚持使用的东西,我该死。上次经历此周期时,我选择了SCons,可能会再次使用它。

1
我也建议使用Cppcheck进行静态分析。
格雷格·休吉尔

10
关于第6点:“前几天我看到一本书叫'Die Gnu Autotools',我在想'哎呀!” 直到我意识到标题是德语”。
cercerilla

2

2)和3)已更改。C99是主流,C90越来越过时。gcc -Wall -std=c99 -pedantic

除此之外,其他答案中尚未解决的两个最值得注意的更改是:

  • C11。ISO 9899:2011。
  • MISRA-C:2004。

1

在最近的研究/调查中,C编程语言使其成为Dobb博士期刊上排名前2或3的编程语言。

至于实现一种语言,C用于实现Google正在构建的一种新语言,称为Go(golang.org)。

近年来,我没有关注C的usenet小组。我经常访问其Freenode IRC频道。它很活跃,很多人经常光顾。

新的程序正在用C编写,但是没有像今年(例如1999年)那样广为人知。

这些是最重要的事情。可能还有更多,但我希望您与程序员的帽子保持联系,尽管您可能不常使用帽子的C模型:)


0

我认为C99支持比您想象的要好。Visual Studio不支持它,但是我能想到的所有其他编译器都支持它(可能到处都有一些遗漏)。如果您不需要与VS兼容,那么我想说C99,因为它比C89 IMHO更加令人愉悦。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.