支持以下数组和指针扩展:
对于可互换但不完全相同的类型,允许指针之间存在分配和指针差别,例如,unsigned char * 和 char *。 这包括指向相同大小的整型的指针,通常为 int * 和 long *。 将发出警告,例如:
#513-D: a value of type "char *" cannot be assigned to an entity of type "unsigned char *"
允许将字符串常数分配给指向任何类型字符的指针,而不会发出警告。
如果目标类型添加了非顶级的类型限定符,则允许分配指针类型;例如,将 int ** 分配给 const int **。 这些指针类型对也允许存在比较和指针差别。 将发出警告,例如:
#42-D: operand types are incompatible ("const int **" and "int **")
在指针运算中,如果需要,则始终将指向 void
的指针隐式转换为其他类型。
同样,如果需要,始终将空指针常数隐式转换为正确类型的空指针。 在 ISO C 中,某些运算符允许这样转换,而其他运算符不允许。
可以分配指向不同函数类型的指针,或者进行相等 (==
) 或不相等
(!=
) 比较,而无需进行显式类型转换。 将发出警告或错误,例如:
#42-D: operand types are incompatible ("int (*)(char *)" and "unsigned int (*)(char *)")
在 C++ 模式下,禁止使用该扩展。
可以将指向 void 的指针隐式转换为指向函数类型的指针,反之亦然。
在初始值设定项中,如果整型足够大以包含某个指针常数值,则可以将其转换为整型。
如果数组带有下标或以类似方式使用,则会将非左值的数组表达式转换为指向数组中的第一个元素的指针。