Это может быть что-то слишком очевидно. Тем не менее, я не смог найти конкретный ответ, хотя многие потоки 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
Я думаю, что мне не хватает чего-то очень очевидного и простого. Но не могу точно определить это: — /
Спасибо!
1)
sizeof
Оператор возвращает количество байтов в объектном представлении своего операнда. Операнд
либо выражение, которое является неоцененным операндом (раздел 5), или в скобках тип-идентификатор. (акцент мой)
В вашем случае это тип-идентификатор поэтому он должен быть заключен в скобки. Что такое идентификатор типа, описано в 8.1 Имена типов [dcl.name].
sizeof tmp
должно быть sizeof (tmp)
,
Как в
if (c <= sizeof tmp)
должно быть if (c <= sizeof (tmp))
,
Да, довольно «очевидно и просто».
Оператор sizeof имеет две формы:
sizeof expression
sizeof(type)
Когда вы даете ему тип, вам нужна скобка, sizeof(tmp)
добавить круглые скобки tmp
: sizeof(tmp)