Да, это так. Но это плохой стиль. Не прямое объявление структуры, а прямое объявление типа указателя. Это обфускация, информация о том, что данная переменная или параметр является указателем (и в меньшей степени для массивов), крайне важна, когда вы хотите прочитать код.
При просмотре кода часто бывает трудно увидеть на первый взгляд, какая функция может иметь побочный эффект или нет. Если используемые типы скрывают эту информацию, это добавляет бремени запоминания для читателя.
int do_fancy(vector a, vector b);
или
int do_fancy(vector *a, vector *b);
в первом случае можно пропустить легко, что эта функция может изменить содержание или б. Во втором я предупрежден.
И когда на самом деле писать код, я также знаю непосредственно, чтобы написать a->x
, и у меня нет компилятора error: request for member
x 'в чем-то не структура или объединение`.
Я знаю, это похоже на личную вещь вкуса, но, работая с большим количеством внешнего кода, я могу заверить вас, что это очень раздражает, когда вы не понимаете уровень переменных в пространстве. Это одна из причин, по которой мне также не нравятся ссылки на C++ (в Java это происходит не потому, что все объекты передаются по ссылке, это непротиворечиво) и типы LPCSTR
от Microsoft.
Большое спасибо, что имеет смысл. – 2009-10-09 13:40:41
... и, возможно, 'const * S1CPTR'. – alecov
Просто для подтверждения, я понимаю. Это эквивалентно 'typedef struct {...} S1; typedef S1 * S1PTR; '? – DCShannon