Search code examples
clinuxprintfunionsformat-specifiers

error: aggregate value used where an integer was expected


I am having following union

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

and I have a function

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

When i compile this code it is giving following error

error: aggregate value used where an integer was expected

Solution

  • You are failing to access a field of the indexed union array: mydata[0] is a value of type union data, and can't be cast to uint64_t.

    You need to access the proper union member:

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

    to select the uint64_t value. No need for the cast.

    Also: Use PRIu64 to portably print 64-bit values, you can't assume that %llu is the right format specifier.