初始化在声明工会阵列 [英] initialize a union array at declaration
本文介绍了初始化在声明工会阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在初始化声明如下工会数组:
的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屋!
查看全文