Привет всем!
Возник вопрос — зачем вот в таком, к примеру, объявлении:
typedef struct _RECTL /* rcl */
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECTL, *PRECTL, *LPRECTL;
указывать _RECTL? Взято из windef.h. Причем, видела в куче мест. И в одной из моих книг по Objective-C тоже все время так пишут, но при этом не объяснено, зачем. Ведь можно написать вообще без _RECTL по идее — по крайней мере, Visual Studio понимает, да и XCode тоже...
Здравствуйте, XJess, Вы писали:
XJ>Привет всем!
XJ>Возник вопрос — зачем вот в таком, к примеру, объявлении:
XJ>XJ>typedef struct _RECTL /* rcl */
XJ>{
XJ> LONG left;
XJ> LONG top;
XJ> LONG right;
XJ> LONG bottom;
XJ>} RECTL, *PRECTL, *LPRECTL;
XJ>
XJ>указывать _RECTL? Взято из windef.h. Причем, видела в куче мест. И в одной из моих книг по Objective-C тоже все время так пишут, но при этом не объяснено, зачем. Ведь можно написать вообще без _RECTL по идее — по крайней мере, Visual Studio понимает, да и XCode тоже...
Этого требуют правила "чистого" С (не C++):
struct ABC
{
int A;
int B;
int C;
};
typedef struct _DEF
{
int D;
int E;
int F;
} DEF, *PDEF;
// Нотация в стиле "чистого" C - необходимо указывать полный тип.
int function1(struct ABC *pData)
{
...
}
// Более лаконично.
// Здесь struct указывать необязательно - DEF является псевдонимом для struct _DEF.
int function2(DEF *pData)
{
...
}
Здравствуйте, Timonn24, Вы писали:
T>потому что pure С-стайл..
Неправда.
gcc с -std=c89 и -std=c99 не ругается на
typedef struct
{
int a;
}p;
Да и с какой стати должен это делать?
Могли просто такие guidelines быть, чтобы не делать неименованных структур.
Здравствуйте, XJess, Вы писали:
XJ>Привет всем!
XJ>Возник вопрос — зачем вот в таком, к примеру, объявлении:
XJ>XJ>typedef struct _RECTL /* rcl */
XJ>{
XJ> LONG left;
XJ> LONG top;
XJ> LONG right;
XJ> LONG bottom;
XJ>} RECTL, *PRECTL, *LPRECTL;
XJ>
XJ>указывать _RECTL? Взято из windef.h. Причем, видела в куче мест. И в одной из моих книг по Objective-C тоже все время так пишут, но при этом не объяснено, зачем. Ведь можно написать вообще без _RECTL по идее — по крайней мере, Visual Studio понимает, да и XCode тоже...
Например, для диагностики. Что лучше — видеть "это поле не является членом структуры _RECTL" или "это поле не является членом безымянной структуры номер 212, описанной в winapi149bx.h на строке 3498349"?