Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lilim
7 / 7 / 0
Регистрация: 24.12.2011
Сообщений: 53
#1

Для чего typedef struct - C++

28.07.2013, 18:06. Просмотров 5865. Ответов 6
Метки нет (Все метки)

Часто в "профессиональном" коде вижу -
C++
1
2
3
typedef struct MyStruct {
// ...
} MyStuct;
даёт ли это какие то преимущества перед простым объявлением -
C++
1
2
3
struct MyStruct {
// ...
};
1
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2013, 18:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Для чего typedef struct (C++):

Для чего используют typedef? - C++
Здравствуйте программисты! Набрёл на тему,там используется какой-то typedef, подскажите пожалуйста,что это такое,как с ним работать. И...

typedef struct - C++
а зачем вы используете конструкцию typedef struct name{...} ? и какие она дает преимущества в отличии от struct name{...}

typedef struct .... - C++
Здравствуейте. Обьясните пожалуйсто новичку что означает этот код. typedef struct { long num_servers; long data_size; char*...

typedef struct - C++
Ребята, нужна помощь. Первый раз использую typedef struct. Вроде бы всё работает, но хочу удостовериться по причине: это мой уже 2-ой...

typedef struct + TXT - C++
Такое вот задание.. есть TXT файл, пропарсить смогу сам, а дальше не знаю что делать, допустим, считали данные : Строка : "Ученики" ...

Волшебные вещи с typedef struct - C++
у меня сейчас мозг взорвется не пойму в чем ошибка,где я не так делаю? #include <stdio.h> #include <locale.h> #include <stdlib.h> ...

6
Evg
Эксперт CАвтор FAQ
18261 / 6386 / 440
Регистрация: 30.03.2009
Сообщений: 17,671
Записей в блоге: 28
28.07.2013, 18:16 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Принципиальных преимуществ кроме того, чтобы писать меньше букв, не даёт. Во втором случае в языке Си у тебя НЕ вводится новый идентификатор в область видимости, хотя сложно это назвать преимуществом. Первый вариант, в основном, нужен в тех случаях, когда внутри структуры описывается поле, которое есть указатель на эту же самую структуру (например, указатель next при реализации списка). По другому его создать не получится

Указатель на структуру - что напечатает программа
странное употребления к-го слова typedef
5
Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
28.07.2013, 18:23 #3
Например
C++
1
2
struct MyStruct {};
typedef MyStruct *My;
Если работаешь со списком так удобнее и вообще рекомендуется объявлять пользовательский тип как указатель на MyStruct. Если не ошибаюсь.
0
Evg
Эксперт CАвтор FAQ
18261 / 6386 / 440
Регистрация: 30.03.2009
Сообщений: 17,671
Записей в блоге: 28
28.07.2013, 18:29 #4
Fintt, я вообще-то говорил о том, чтобы объявить указатель ВНУТРИ описания тела структуры, а не снаружи, как у тебя
0
Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
28.07.2013, 18:31 #5
Я теперь понял что это всё с С, я сообщение раньше начал писать просто вот и не увидел сразу.
1
Evg
Эксперт CАвтор FAQ
18261 / 6386 / 440
Регистрация: 30.03.2009
Сообщений: 17,671
Записей в блоге: 28
28.07.2013, 18:41 #6
По поводу заведения typedef'а для указателя на структуру. На мой взгляд это тоже не очень удобно. Потому что в этом случае невозможно будет задавать указатель на const. Т.е. вот так можно

C
typedef struct {
  ...
} struct_t;
 
struct_t *ptr1;
const struct_t *ptr2;
а вот так нельзя (в смысле можно, но получим совсем не то, что хотели):

C
typedef struct {
  ...
} struct_t;
 
typedef struct_t * struct_ptr_t;
 
struct_ptr_t ptr1;
const struct_ptr_t ptr2;
а чтобы получить то, что хотели, то надо писать:

C
typedef struct {
  ...
} struct_t;
 
typedef struct_t * struct_ptr_t;
typedef const struct_t * struct_const_ptr_t;
 
struct_ptr_t ptr1;
struct_const_ptr_t ptr2;
Лично моё мнение - заведение отдельного typedef'а на указатель скорее приводит к бардаку и снижению читабельности кода, чем к порядку
0
Epsilion
4 / 4 / 0
Регистрация: 01.03.2017
Сообщений: 12
08.08.2017, 12:07 #7
Вставлю свои 5 копеек.
Тоже недавно столкнулся с данным вопросом. После гугления нагуглилась данная тема.
А ещё одна на геймдеве [cut] и там так же сказано, что...
typedef struct так же используется для определения альясов
C++
1
2
3
4
typedef struct _base_chunk
{
  udword base, size;
}MY_MEGA_MODEL_CHUNK, HDD_TREE_CHUNK и т.п.
Используется для логической разметки структуры кода. Типа, если надо определить несколько структур одинаковой структуры, но логически разного назначения. Иначе, пришлось бы либо объявлять все переменные для одной структуры, либо юзать наследование для каждой структуры, либо объявлять все структуры копипастя код первой что приведёт к дублированию строк.

Добавлено через 3 минуты
Кстати, подобный подход используется в заголовочных файлах DirectX SDK. Собстна изучение этих файлов и послужило толчком к гугление сабжа.
2
08.08.2017, 12:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2017, 12:07
Привет! Вот еще темы с ответами:

Программа через структуру typedef struct - C++
Люди помогите если несложно с программой, задание таково: 1.С клавиатуры вводятся пункты структуры - Студент: Матрикул - номер...

typedef непонятно чего - C++
Есть вот такой код typedef private void (T::*TimedFunction)(void); По сути это должна быть ссылка на функцию класса Т с возвращаемым...

Для чего нужно писать в int main() в скобках всякие args потом объявлять переменные, и прочее. Для чего если можно в сборках это все обьявлять. - C++
Для чего нужно писать в int main() в скобках всякие args потом объявлять переменные, и прочее. Для чего если можно в сборках это все...

Typedef для функций - C++
Здравствуйте! В книге Страуструпа в качестве примера приводится typedef для указателей на функции например: typedef void(*SIG_TYP)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru