【问题标题】:Which most common extensions are there (or used) to ANSI C?ANSI C 有哪些(或使用过)最常见的扩展?
【发布时间】:2009-12-02 00:03:05
【问题描述】:

您可以放置​​一个链接到比较矩阵或主要编译器可用的扩展列表。如果这些都不可用,您可以在您喜欢的编译器中编写您使用或喜欢的扩展列表。

【问题讨论】:

    标签: c compiler-construction programming-languages c89


    【解决方案1】:
    【解决方案2】:

    目前为止的 C++/ISO-C 风格的 cmets://

    【讨论】:

      【解决方案3】:

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

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

      • long long 必须是最常见的扩展名;
      • 随后允许访问union 成员,而不是最后写入的成员;
      • inline 可能在上面;
      • snprintf 在很多地方都可以使用;
      • 允许在函数指针和 void 指针之间进行强制转换很普遍;
      • alloca

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

      【讨论】:

      • 我正在考虑最后一个可用的,然后是 C99。我认为 C99 上的几乎/所有添加都基于 C89 的扩展,因此它们成为 ANSI 并删除了扩展“标签”。当然,如果 C89 的扩展没有获得 ANSI 规范,它仍然是 C99 的扩展。
      • C99 是由 ISO 而不是 ANSI 编写的。 ANSI 随后批准了它,但即便如此,“ANSI C”在我的经验中更常见的意思是 C89,因为这个名称在 C99 存在之前就存在了。当 C99 是由 ISO 工作组而不是 ANSI 工作组设计时,开始称它为“ANSI C”可能在当时被认为有点奇怪,因此它比 C89“少 ANSI”。或者它可能主要受 gcc 的 -ansi 选项的影响。
      【解决方案4】:

      在一个臭名昭著的嵌入式 C 编译器中,您可以独立于处理器的偏好为结构类型指定小端或大端。编写设备驱动程序非常方便,如果您记得不要通过(比如说)忘记字节序的int* 访问其中一个字段。

      你对特征矩阵是认真的吗?您认为 SO 成员无事可做吗?

      【讨论】:

        【解决方案5】:

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

        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;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-03-18
          • 1970-01-01
          • 2011-06-08
          • 2011-02-26
          • 2010-10-31
          • 2010-11-16
          • 1970-01-01
          相关资源
          最近更新 更多