2009-12-02 47 views

回答

2

嗯,这取决于你说的是“C”还是C99。由于大多数主流实现尚未完全符合C99标准,因此我将假设C89。

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

  • long long一定是最常见的扩展;
  • 后面允许访问除最后写入的union成员;
  • inline可能在那里;
  • snprintf在很多地方都有售;
  • 允许在函数指针和空指针之间进行转换是普遍的;
  • alloca

编辑:稀释是,我怎么能忘了无处不在的//风格的注释。

+0

我想在最后可用,然后C99。我认为C99上的所有附加功能都是基于对C89的扩展,因此它们变成了ANSI并删除了扩展名“标签”。当然,如果C89的扩展没有获得ANSI规范,它仍然是C99的扩展。 – Maniero 2009-12-02 00:35:42

+0

C99是由ISO而不是ANSI编写的。然后ANSI就批准了它,但即使如此,“ANSI C”更符合我的经验,因为在C99出现之前卡住了这个名字。当它由ISO工作组而不是ANSI工作组设计时,可能会考虑在开始调用C99“ANSI C”时有点奇怪,因此它比C89“更低ANSI”。或者,它可能主要受gcc的-ansi选项影响。 – 2009-12-02 02:35:38

1

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

你是否认真对待特征矩阵?你认为SO成员没有更好的办法吗?

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; 
4

C++/ISO-C风格评论迄今为止://