Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
Axel1988
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 51
1

Имя в typedef enum

02.05.2017, 00:55. Просмотров 6023. Ответов 12
Метки нет (Все метки)

C
1
2
3
4
typedef enum enumName {
    FIELD1,
    FIELD2
} Name;
Ребят, объясните пожалуйста, для чего иногда объявляют имена подобным структурам(enumName)... Для указателя на эту структуру? Чаще всего их не используют вовсе...
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2017, 00:55
Ответы с готовыми решениями:

Без использования typedef все работает. При добавлении typedef — более 100 ошибок
Есть программа, с описанием структуры и функций, работающими с ней. Без использования typedef все...

typedef struct X{X* pX;}X;
Собственно сабж: typedef struct X{ X* ptrX; }X; Когда происходит объявление ptrX тип...

typedef sruct c
#include <stdio.h> typedef struct { char name, zveno; int quanity; }Otdel; int main(int...

Typedef struct
Добрый день!! пытаюсь разобраться со структурами,вроде бы как все понятно кроме одного.Ключевое...

Объясните typedef. Cи
Есть программа с структурами, структура записана в typedef у структуры есть название, потом ей...

12
HighPredator
5720 / 2042 / 727
Регистрация: 10.12.2010
Сообщений: 5,840
Записей в блоге: 3
02.05.2017, 08:46 2
Лучший ответ Сообщение было отмечено Axel1988 как решение

Решение

Вообще используют. Чаще для структур, а не перечислений правда, но используют. Почему именно так? Чтобы не таскать за собой ключевые слова типа данных. Посмотрите на пример:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
typedef enum MyEnum
{
    value_one,
    value_two
} *MyEnumPtr;
 
int main(void)
{
    enum MyEnum myEnum = value_two; // NOTE THIS: 'enum' keyword is required
    
    MyEnumPtr ptr = &myEnum; // NOTE THIS: no more 'enum'
    
    printf("%d", *ptr);
    
    return 0;
}
0
DemolitionMan
130 / 156 / 87
Регистрация: 06.04.2016
Сообщений: 992
02.05.2017, 09:00 3
Как я и предполагал ключевое слово enum в первом замечании не нужно.
cpp.sh/8sism
По теме: enumName - программисты дают имена структурам для понятности для чего они нужны. Да, действительно, имена чаще всего не используют вовсе, я тоже так думаю, а не используют их потому что задан тип(Name). Указателей у автора темы нету, указатели есть у HighPredatora.
0
HighPredator
5720 / 2042 / 727
Регистрация: 10.12.2010
Сообщений: 5,840
Записей в блоге: 3
02.05.2017, 09:06 4
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Как я и предполагал ключевое слово enum в первом замечании не нужно.
Нужно. Вы плюсовым компилятором обрабатывали код, а в c++по-другому. http://rextester.com/LCQ79739
0
02.05.2017, 09:06
DemolitionMan
130 / 156 / 87
Регистрация: 06.04.2016
Сообщений: 992
02.05.2017, 09:10 5
Цитата Сообщение от HighPredator Посмотреть сообщение
Вы плюсовым компилятором обрабатывали код, а там по-другому.
- где там? Что-то этот компилятор подтупливает явно. Ясно видно, что MyEnum - это енумератор.
0
HighPredator
5720 / 2042 / 727
Регистрация: 10.12.2010
Сообщений: 5,840
Записей в блоге: 3
02.05.2017, 09:14 6
DemolitionMan, ничего он не потдупливает. В языке си наличие ключевых слов struct/enum обязательно при объявлении переменных соответствующих типов (если тип не заалиасен). В отличие от с++.
0
DemolitionMan
130 / 156 / 87
Регистрация: 06.04.2016
Сообщений: 992
02.05.2017, 09:36 7
Понятно, а что значит заалиасен? Новое имя типа придумали при помощи typedef?
0
HighPredator
5720 / 2042 / 727
Регистрация: 10.12.2010
Сообщений: 5,840
Записей в блоге: 3
02.05.2017, 10:03 8
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Новое имя типа придумали при помощи typedef?
Да.
0
Axel1988
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 51
02.05.2017, 10:23  [ТС] 9
C++
1
2
3
4
5
typedef enum MyEnum
{
    value_one,
    value_two
} MyEnumPtr;
А если структура без указателей? Тогда для чего используется MyEnum?)
0
HighPredator
5720 / 2042 / 727
Регистрация: 10.12.2010
Сообщений: 5,840
Записей в блоге: 3
02.05.2017, 10:31 10
Лучший ответ Сообщение было отмечено Axel1988 как решение

Решение

Axel1988, если указателей нет, то просто чтобы дать возможность пользователю кода использовать тип двумя способами.
C
1
2
3
4
5
6
7
8
9
typedef enum MyEnum
{
  value_one,
  value_two
} TwoValueEnum;
 
// ...
enum MyEnum var1 = value_one;
TwoValueEnum var2 = value_two;
0
Axel1988
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 51
02.05.2017, 11:18  [ТС] 11
Спасибо Большое!!!

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
typedef struct MyEnum
{
  value_one,
  value_two
} TwoValueEnum;
 
// ...
struct MyEnum var1 = {10;20};
TwoValueEnum var2 = {10;20};
А для структур такая запись тоже корректна?
0
HighPredator
5720 / 2042 / 727
Регистрация: 10.12.2010
Сообщений: 5,840
Записей в блоге: 3
02.05.2017, 11:24 12
Убедитесь сами: http://rextester.com/GATVB54827
0
Axel1988
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 51
02.05.2017, 11:29  [ТС] 13
Благодарю!
0
02.05.2017, 11:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2017, 11:29

Typedef строка
#include &lt;stdio.h&gt; typedef char string; // эта строка обязательна (по заданию) void concat(string...

Не работает typedef
Приветствую. Предполагаю что ошибка дурадская, но найти ее не могу #define MAX_SIZE_NAME 30...

Typedef ошибка
Хочу засунуть в typedef структуру, выдает ошибку Код: typedef struct ComplexObj complex; ...


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

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

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