Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using sizeof operator on a typedef-ed struct

Tags:

c++

typedef

This might be something too obvious. However, I couldn't find the specific answer though many stackoverflow threads talk about different aspects of this.

typedef struct _tmp {
   unsigned int a;
   unsigned int b;
} tmp;

int main()
{
    int c=10;
    if (c <= sizeof tmp) {
       printf("less\n");
    } else {
       printf("more\n");
    }
    return 0;
}

I compile this prog as -

g++ -lstdc++ a.cpp

I get an error -

expected primary-expression before ‘)’ token

I think I am missing something very obvious and straightforward. But can't seem to pinpoint it :-/

Thanks!

like image 237
sskanitk Avatar asked Oct 16 '12 22:10

sskanitk


2 Answers

5.3.3 Sizeof [expr.sizeof]

1) The sizeof operator yields the number of bytes in the object representation of its operand. The operand is either an expression, which is an unevaluated operand (Clause 5), or a parenthesized type-id. (emphasis mine)

In your case, it is a type-id so it must be parenthesized. What a type-id is is described in 8.1 Type names [dcl.name].

sizeof tmp should be sizeof (tmp).

As in

if (c <= sizeof tmp) should be if (c <= sizeof (tmp)).

Yup, pretty "obvious and straightforward".

like image 159
Luchian Grigore Avatar answered Sep 30 '22 03:09

Luchian Grigore


The sizeof operator have two forms:

sizeof expression
sizeof(type)

As you're giving it a type, you need the parenthesis, sizeof(tmp)

like image 27
nos Avatar answered Sep 30 '22 03:09

nos