error:在预期整数时使用的聚合值

时间:2014-01-08 11:56:13

标签: c linux printf unions format-specifiers

我正在关注联盟

union data {
     uint64_t val;
     struct{
     ....
     }
};

我有一个功能

func(union data mydata[])
{
    printf("%llu",(uint64_t)mydata[0]); // Here is the error
}

当我编译此代码时,它会给出以下错误

error: aggregate value used where an integer was expected

2 个答案:

答案 0 :(得分:10)

您无法访问索引联合数组的字段:mydata[0]union data类型的值,无法转换为uint64_t

您需要访问正确的工会成员:

printf("%" PRIu64, mydata[0].val);

选择uint64_t值。不需要演员。

另外:使用PRIu64可移植地打印64位值,您不能认为%llu是正确的格式说明符。

答案 1 :(得分:4)

访问n指向mydata <的int64_t th 元素的第一个成员的“脏”解决方案strong> 没有 知道它的名字是:

#include <inttypes.h>
#include <stdio.h>

union data 
{
  uint64_t val;
  ...
};

func(union data mydata[])
{ 
  size_t n = 3;
  printf("%"PRIu64, *((uint64_t *)(mydata + n));     
}

这可以作为第一个成员的联合或结构的地址,保证与联合或结构本身的地址相同。