C99已经存在超过10年了,但对它的支持来得很慢,所以大多数开发人员都坚持使用C89。即使在今天,当我在C代码中遇到C99特性时,我有时也会感到些许惊讶。
现在大多数主流编译器都支持C99 (MSVC是一个明显的例外,一些嵌入式编译器也落后了),我觉得使用C的开发人员可能应该知道他们可以使用哪些C99特性。其中一些功能只是以前从未标准化过的常见功能(例如snprintf
),或者是C++中熟悉的功能(灵活的变量声明放置或单行//
注释),但是一些新功能是在C99中首次引入的,许多程序员对此并不熟悉。
您认为C99中最有用的新功能是什么?
作为参考,the C99 standard (标记为草案,但据我所知与更新的标准相同)、list of new features和GCC C99 implementation status。
请为每个答案提供一个功能;请随意留下多个答案。鼓励使用演示新功能的简短代码示例。
发布于 2010-01-12 14:29:23
我太习惯打字了
for (int i = 0; i < n; ++i) { ... }
在C++中,使用非C99编译器是一件痛苦的事情,我不得不说
int i;
for (i = 0; i < n; ++i ) { ... }
发布于 2010-01-12 14:26:47
stdint.h
,它定义了int8_t
、uint8_t
等。不再需要对整数的宽度做不可移植的假设。
uint32_t truth = 0xDECAFBAD;
发布于 2010-01-12 14:50:41
我认为新的初始化器机制非常重要。
struct { int x, y; } a[10] = { [3] = { .y = 12, .x = 1 } };
好吧-不是一个令人信服的例子,但符号是准确的。您可以初始化数组的特定元素和结构的特定成员。
也许这是一个更好的例子--尽管我承认它并不是非常令人信服:
enum { Iron = 26, Aluminium = 13, Beryllium = 4, ... };
const char *element_names[] =
{
[Iron] = "Iron",
[Aluminium] = "Aluminium",
[Beryllium] = "Beryllium",
...
};
https://stackoverflow.com/questions/2047065
复制相似问题