初始化在声明工会阵列 [英] initialize a union array at declaration

查看:113
本文介绍了初始化在声明工会阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在初始化声明如下工会数组:

 的typedef工会{__m128d米;浮F [4]; }垫;
垫米[2] = {{{30467.14153,5910.1427,15846.23837,7271.22705}
{30467.14153,5910.1427,15846.23837,7271.22705}}};

但I'getting以下错误:

  matrix.c:在函数'主':
matrix.c:21:错误:不兼容的类型在初始化
matrix.c:21:警告:在联合初始多余的元素
matrix.c:21:警告:(近初始化M [0]')
matrix.c:21:警告:在联合初始多余的元素
matrix.c:21:警告:(近初始化M [0]')
matrix.c:21:警告:在联合初始多余的元素
matrix.c:21:警告:(近初始化M [0]')
matrix.c:21:错误:不兼容的类型在初始化
matrix.c:21:警告:在联合初始多余的元素
matrix.c:21:警告:(近初始化'M [1])
matrix.c:21:警告:在联合初始多余的元素
matrix.c:21:警告:(近初始化'M [1])
matrix.c:21:警告:在联合初始多余的元素
matrix.c:21:警告:(近初始化'M [1])


解决方案

引用<一个href=\"http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/com.ibm.xlcpp8l.doc/language/ref/strin.htm\">this页面:


  

使用C89风格的初始化,结构成员必须在订单初始化的声明,并且只有一个工会的第一个成员可以被初始化。


所以,要么把浮动第一阵列,​​或者如果可能使用C99写:

 垫米[2] = {{.F = {/ *等* /}} / * ... * /};

是最重要的事情了 .F

I'm trying to initialize the following union array at declaration:

typedef union { __m128d m;  float f[4]; } mat;
mat m[2] = { {{30467.14153,5910.1427,15846.23837,7271.22705},
{30467.14153,5910.1427,15846.23837,7271.22705}}};

But I'getting the following error:

matrix.c: In function ‘main’:
matrix.c:21: error: incompatible types in initialization
matrix.c:21: warning: excess elements in union initializer
matrix.c:21: warning: (near initialization for ‘m[0]’)
matrix.c:21: warning: excess elements in union initializer
matrix.c:21: warning: (near initialization for ‘m[0]’)
matrix.c:21: warning: excess elements in union initializer
matrix.c:21: warning: (near initialization for ‘m[0]’)
matrix.c:21: error: incompatible types in initialization
matrix.c:21: warning: excess elements in union initializer
matrix.c:21: warning: (near initialization for ‘m[1]’)
matrix.c:21: warning: excess elements in union initializer
matrix.c:21: warning: (near initialization for ‘m[1]’)
matrix.c:21: warning: excess elements in union initializer
matrix.c:21: warning: (near initialization for ‘m[1]’)

解决方案

Quoting this page:

With C89-style initializers, structure members must be initialized in the order declared, and only the first member of a union can be initialized.

So, either put the float array first, or if possible use C99 and write:

mat m[2] = { { .f = { /* and so on */ } }, /* ... */ };

The important thing being the .f.

这篇关于初始化在声明工会阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆