考虑以下源代码示例。
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 选项编译的,则没有字段可以互为别名,因为即使删除两种 struct 类型的标记,两种 struct 类型仍不相同。
如果该示例是使用 -xalias_level=std 选项编译的,则没有字段可以互为别名,原因是两种类型和标记均不相同。