Это допустимая форма typedef struct и если да, что это значит? - PullRequest
4 голосов
/ 22 июля 2011

Сейчас мы работаем с куском кода, в котором есть объявления вида:

typedef PACKED(struct) 
{

// some stuff in here

} struct_name; 

сейчас ... PACKED - это макрос с нашей стороны.Какого черта этот синтаксис означает? Я не понимаю использование круглых скобок. Это не компиляция, поэтому я предполагаю, что это, вероятно, неправильно.Это близко к другому допустимому синтаксису, или это просто чепуха?

Если он почти допустим .. как этот код должен быть написан и что он должен означать?

Единственная форма typedef struct I 'Вы видели и можете найти в Интернете:

typedef struct
{
 // some stuff in here
} struct_name;

Решено: Все, что мне нужно было понять, это то, что struct была параметром в макрос-функции.Спасибо!

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

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

Скорее всего, вы полностью упускаете определение макроса PACKED.

1 голос
/ 22 июля 2011

С этим синтаксисом PACKED должен быть макросом.

Вероятно, имеется в виду какой-то способ выравнивания структуры

 __attribute__(packed, aligned(1)) 

#pragma pack(push,1)
//...

#pragma pack(pop)

хотя нам трудно сказать вам, а не наоборот:))

1 голос
/ 22 июля 2011

Большинство компиляторов предоставляют функциональные возможности для определения того, как структуры должны храниться в памяти.Он используется редко, но packed обычно означает *have this structure occupy the least space possible, even at a loss of speed in accessing its members*.

Учитывая, что ваш код не компилируется, я бы сказал, что PACKED, скорее всего, был потерян макрос или ключевое слово для компиляторанедоступно в том, который вы используете.

...