考虑以下源代码示例。
struct bar;
struct foo {
struct foo *ffp;
struct bar *fbp;
} *fp;
struct bar {
struct bar *bbp;
long b2;
} *bp;
下面是编译器根据以下别名级别作出的假定:
如果该示例是使用 -xalias_level=weak 选项编译的,只有 fp->ffp 和 bp->bbp 可互为别名。
如果该示例是使用 -xalias_level=layout 选项编译的,只有 fp->ffp 和 bp->bbp 可互为别名。
如果该示例是使用 -xalias_level=strict 选项编译的,则没有字段可以互为别名,原因是即使删除两种结构类型的标记,两种结构类型仍不相同。
如果该示例是使用 -xalias_level=std 选项编译的,则没有字段可以互为别名,原因是两种类型和标记均不相同。