Oracle Solaris Studio 12.2: C ユーザーガイド

5.3.4 明示的な別名設定が必要

次の例では、struct fooa 型のポインタ f1 が型 struct foob 型のポインタとしてキャストされています。lint で -Xalias_level=strict (またはそれ以上) を指定する場合、構造体の型がまったく同じ (同じ型で同数の構造体フィールド) でないかぎり、このようなキャストは明示的な別名設定を必要とします。また、別名レベルが standardstrong の場合、別名設定を実行するにはタグの一致が必要であると仮定されます。f1 への割り当て前に #pragma alias (struct fooastruct foob) を実行すると、lint は警告メッセージの生成を停止します。


struct fooa {
    int a;
};

struct foob {
    int b;
};

struct fooa *f1;
struct foob *f2;

void main()
{
    f1 = (struct fooa *)f2; /* explicit aliasing required warning */
}