9.17 配列とポインタの拡張機能

コンパイラでは、交換可能だが同一ではない型へのポインタ間での割り当ての許可など、多数の配列とポインタの拡張機能がサポートされています。

以下の配列とポインタの拡張機能がサポートされています。
  • unsigned char * char * など、交換可能だが同一ではない型へのポインタ間では、代入とポインタの相違が許可されます。この中には、同じサイズの整数型へのポインタも含まれます。典型的な例としては、 int * long * が挙げられます。この場合は警告が生成されます。
    任意の文字へのポインタに対する文字列定数の代入は、警告なしで許可されます。
  • ポインタ型の代入は、 int ** const int ** に代入する場合など、デスティネーションの型にトップレベル以外の型修飾子が付加されている場合に許可されます。このようなポインタ型の比較とポインタの相違も許可されます。この場合は警告が生成されます。
  • ポインタに対する演算では、必要に応じて、void へのポインタが別の型に暗黙的に変換されます。また、NULL ポインタ定数も、必要に応じて、適切な型の NULL ポインタに暗黙的に変換されます。ISO C では、これらの変換が可能な演算子と、そうでない演算子があります。
  • 明示的な型のキャストがなくても、異なる関数型へのポインタを代入したり、等しい(==)か等しくない(!=)かで比較したりできます。この場合は、警告またはエラーが生成されます。
    この拡張機能は C++ モードでは使用できません。
  • void へのポインタは、関数型へのポインタとの間で、暗黙的に変換できます。
  • イニシャライザでは、ある整数型でポインタ定数値を保持できる場合、その整数型にポインタ定数値をキャストできます。
  • 左辺値でない配列式は、添字が付加されているか、似たような方法で使用される場合に、配列の第 1 要素へのポインタに変換されます。
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.