4.5.7. __attribute__((transparent_union))

如果将 transparent_union 变量属性附加到具有联合类型的函数参数中,则表示相应自变量可具有任何联合成员的类型,但传递自变量时就好像其类型是第一个联合成员的类型一样。

Note

C 规范规定,如果将联合作为一种类型写入并以另一种类型回读,则返回的值是未定义的。 因此,区分 transparent_union 以哪种类型写入的方法也必须作为自变量传递。

Note

此变量属性是 ARM 编译器支持的 GNU 编译器扩展。

Note

也可以在 typedef 上将此属性用于联合数据类型。 在这种情况下,它应用于所有具有该类型的函数参数。

模式

仅在 GNU 模式下支持。

示例


typedef union

{

    int myint;

    float myfloat;

} transparent_union_t;



void Variable_Attributes_transparent_union_0(transparent_union_t aUnion __attribute__ ((transparent_union)))

{

    static int aStatic;

    aStatic +=aUnion.myint;

}



void Variable_Attributes_transparent_union_1()

{

    int aLocal =0;

    float bLocal =0;

    Variable_Attributes_transparent_union_0(aLocal);

    Variable_Attributes_transparent_union_0(bLocal);

}

另请参阅

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential