Oracle® Solaris Studio 12.4:C 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

5.4.6 示例:结构的结构

考虑以下源代码示例。

struct bar;

struct foo {
        struct foo *ffp;
        struct bar *fbp;
} *fp;

struct bar {
        struct bar *bbp;
        long        b2;
} *bp;

下面是编译器根据各种别名级别作出的假定:

  • 如果该示例是使用 -xalias_level=weak 选项编译的,只有 fp->ffpbp->bbp 可互为别名。

  • 如果该示例是使用 -xalias_level=layout 选项编译的,只有 fp->ffpbp->bbp 可互为别名。

  • 如果该示例是使用 -xalias_level=strict 选项编译的,则没有字段可以互为别名,因为即使删除两种 struct 类型的标记,两种 struct 类型仍不相同。

  • 如果该示例是使用 -xalias_level=std 选项编译的,则没有字段可以互为别名,原因是两种类型和标记均不相同。