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

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

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

int main()
{
    int c=10;
    if (c 
 Ivan Vergiliev17 окт. 2012 г., 01:09
Вы также можете проверить этот вопрос:stackoverflow.com/q/12924243/596167.

Ответы на вопрос(3)

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

sizeof expression
sizeof(type)

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

 craken16 мар. 2016 г., 13:49
но рекомендуемая форма - sizeof (тип)
 nos16 мар. 2016 г., 14:18
@MarwenBkh Можете ли вы уточнить, что вы говорите? Вы говорите, что C ++ 11 допускает только sizeof с круглыми скобками? Это неверно. C ++ 11 ввел третий синтаксис для sizeof, хотя,sizeof..( parameter_pack ) (обратите внимание, что три ... тоже являются частью синтаксиса)
 craken16 мар. 2016 г., 14:14
Синтаксис sizeof: sizeof (parameter_pack) (начиная с C ++ 11)
 nos16 мар. 2016 г., 14:07
@MarwenBkh Это 'довольно субъективно. Я рекомендую тебе неиспользовать круглые скобки, когдане нужны, другие могут дать другие рекомендации.
Решение Вопроса
5.3.3 Sizeof [expr.sizeof]

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

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

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

Как в

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

Да, довольно "очевидный и прямой ".

 sskanitk17 окт. 2012 г., 02:04
Спасибо за разъяснение этого! :-)

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

Ваш ответ на вопрос