Использование оператора sizeof в структуре с определением типа

Это может быть что-то слишком очевидно. Тем не менее, я не смог найти конкретный ответ, хотя многие потоки stackoverflow говорят о различных аспектах этого.

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

Я собираю эту прогу как —

g++ -lstdc++ a.cpp

Я получаю ошибку —

expected primary-expression before ‘)’ token

Я думаю, что мне не хватает чего-то очень очевидного и простого. Но не могу точно определить это: — /

Спасибо!

8

Решение

5.3.3 Sizeof [expr.sizeof]

1) sizeof Оператор возвращает количество байтов в объектном представлении своего операнда. Операнд
либо выражение, которое является неоцененным операндом (раздел 5), или в скобках тип-идентификатор. (акцент мой)

В вашем случае это тип-идентификатор поэтому он должен быть заключен в скобки. Что такое идентификатор типа, описано в 8.1 Имена типов [dcl.name].

sizeof tmp должно быть sizeof (tmp),

Как в

if (c <= sizeof tmp) должно быть if (c <= sizeof (tmp)),

Да, довольно «очевидно и просто».

10

Другие решения

Оператор sizeof имеет две формы:

sizeof expression
sizeof(type)

Когда вы даете ему тип, вам нужна скобка, sizeof(tmp)

11

добавить круглые скобки tmp: sizeof(tmp)

3
По вопросам рекламы [email protected]