c - 在声明时初始化 union 数组

标签 c arrays sse initializer unions

我正在尝试在声明时初始化以下 union 数组:

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}}};

但我收到以下错误:

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]’)

最佳答案

引用 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.

因此,要么将 float 数组放在第一位,要么尽可能使用 C99 并编写:

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

重要的是 .f

关于c - 在声明时初始化 union 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11558390/

相关文章:

char name[1],但是当我输入 13 个字符时,屏幕上会发生奇怪的事情

c - 程序在反转顺序时跳过数组的最后一个元素

c - 交换 2 个连续字符串 - 时间复杂度

visual-c++ - 如何在 MSVC 中启用 SSE4.1 和 SSE3(但不是 AVX)

C : Pointers and functions 2DArray

c - 使用双指针参数访问函数内的数组成员的段错误

java - 如何获取JLabel[ ] [ ]中鼠标点击的标签索引?

arrays - 使用jq将JSON行转换为JSON数组

gcc - 在标量矩阵加法中使用 vaddss 代替 adds 有什么好处?

c - 带有 C 段错误的汇编函数