ANSI C中存在(或使用)哪些最常见的扩展?

时间:2009-12-02 00:03:05

标签: c compiler-construction programming-languages c89

您可以添加指向比较矩阵的链接或主编译器可用的扩展列表。如果这些都不可用,您可以在您喜欢的编译器中编写您使用或喜欢的扩展名列表。

5 个答案:

答案 0 :(得分:5)

答案 1 :(得分:4)

到目前为止

C ++ / ISO-C样式评论://

答案 2 :(得分:2)

嗯,这取决于你说“ANSI C”时你的意思是C89还是C99。由于大多数主流实现还不完全符合C99标准,我将假设C89。

在这种情况下,我会说(并且不包括POSIX或BSD套接字等特定API):

  • long long必须是最常见的扩展名;
  • 然后允许访问除最后一次写入之外的union成员;
  • inline可能就在那里;
  • snprintf可在很多地方使用;
  • 允许在函数指针和void指针之间进行转换很普遍;
  • alloca

编辑:啊,是的,我怎么能忘记无处不在的//风格评论。

答案 3 :(得分:1)

在其中一个臭名昭着的嵌入式C编译器中,您可以为结构类型指定小端或大端,而不依赖于处理器的首选项。编写设备驱动程序非常方便,如果您记得不通过(例如)忘记字节序的int*来访问其中一个字段。

您是否认真对待功能矩阵?你认为SO成员没有更好的事情可做吗?

答案 4 :(得分:1)

许多编译器允许匿名联合内部的匿名结构,这对某些事情很有用,例如:

struct vector3
{
    union
    {
        struct
        {
            float x, y, z;
        };
        float v[3];
    };
};

// members can now be accessed by name or by index:
vector3 v;
v.x = 1.0f; v.y = 2.0f; v.z = 3.0f;
v.v[0] = v.v[1] = v.v[2] = 0.0f;