首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C99中最有用的新功能是什么?

C99中最有用的新功能是什么?
EN

Stack Overflow用户
提问于 2010-01-12 14:12:44
回答 16查看 14.1K关注 0票数 78

C99已经存在超过10年了,但对它的支持来得很慢,所以大多数开发人员都坚持使用C89。即使在今天,当我在C代码中遇到C99特性时,我有时也会感到些许惊讶。

现在大多数主流编译器都支持C99 (MSVC是一个明显的例外,一些嵌入式编译器也落后了),我觉得使用C的开发人员可能应该知道他们可以使用哪些C99特性。其中一些功能只是以前从未标准化过的常见功能(例如snprintf),或者是C++中熟悉的功能(灵活的变量声明放置或单行//注释),但是一些新功能是在C99中首次引入的,许多程序员对此并不熟悉。

您认为C99中最有用的新功能是什么?

作为参考,the C99 standard (标记为草案,但据我所知与更新的标准相同)、list of new featuresGCC C99 implementation status

请为每个答案提供一个功能;请随意留下多个答案。鼓励使用演示新功能的简短代码示例。

EN

回答 16

Stack Overflow用户

发布于 2010-01-12 14:29:23

我太习惯打字了

for (int i = 0; i < n; ++i) { ... }

在C++中,使用非C99编译器是一件痛苦的事情,我不得不说

int i;
for (i = 0; i < n; ++i ) { ... }
票数 78
EN

Stack Overflow用户

发布于 2010-01-12 14:26:47

stdint.h,它定义了int8_tuint8_t等。不再需要对整数的宽度做不可移植的假设。

uint32_t truth = 0xDECAFBAD;
票数 73
EN

Stack Overflow用户

发布于 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",
    ...
};
票数 67
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2047065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档