Правильное объявление union

BaskakoF
Offline
Зарегистрирован: 17.06.2017

Компилятор принимает два разных способа описания типа, а какой из них более правильный?

typedef union U1_TYPE { byte  b[16];  int  w[8];};
U1_TYPE b10, b11;

typedef union  { byte  b[16];  int  w[8];}U2_TYPE;
U2_TYPE b20, b21;

Вопрос2: на какой аналог  можно заменить в C++  typedef ?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

BaskakoF пишет:

Вопрос2: на какой аналог  можно заменить в C++  typedef ?

Я union-ами не пользуюсь. Как то нет в них большой надобности. Опять же над С++ есть еще надстройка  ООП (объектно-оринтированое программирование) Там идут разные способы которые решались бы union-ами

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

BaskakoF пишет:

Компилятор принимает два 

Гораздо больше на самом деле

BaskakoF пишет:

какой из них более правильный?

Это как спрсить у ребёнка: "Кого ты больше любишь, маму или папу?"

Так как Вы написали - оба немного кривовато, но оба правильно.

В первом варианте Вы завели класс U1_TYPE. И назначили этому имени пустой синоним. Зачем? Непонятно. Либо там лишнее слово typedef, либо нужно добавить имя синонима в конце перед ";". Хотя и так имеет право на жизнь.

В втором варианте Вы завели безымянный класс и назначили ему синонимом слово U2_TYPE. Опять же неясно зачем было заводить класс безымыянным. Хотя. опять же, имеете право.

Я не говорю, что это бессмысленно. Иногда это нужно (безымянные классы и синонимы), но Вы, похоже, делали это неосознанно, просто так получилось.

BaskakoF пишет:

Вопрос2: на какой аналог  можно заменить в C++  typedef ?

Неясна цель такой замены, а потому и нечего сказать.

 

Logik
Offline
Зарегистрирован: 05.08.2014

Оба рабочих. Применяйте второй т.к. он позводяет сразу описать и указатель на юнион. Получится так

typedef union  { byte  b[16];  int  w[8];} U1_TYPE, *PU1_TYPE;
U1_TYPE b10, b11;
PU1_TYPE p=&b11;

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Logik пишет:

Применяйте второй т.к. он позводяет сразу описать и указатель на юнион. Получится так

А что, первый не позволяет?

Logik
Offline
Зарегистрирован: 05.08.2014

Я код привел. Вам известен известен аналог для первого - показуйте.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы меня троллите? Ну, показать-то нетрудно, только я что-то не понял в чём подвох и где меня "окунут" :)

typedef union U1_TYPE { byte  b[16];  int  w[8];} *PU1_TYPE ;

 

Logik
Offline
Зарегистрирован: 05.08.2014

Так это и есть второй вариант, через синоним. В первом варианте как Вы писали, синоним пустой.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Logik пишет:

Так это и есть второй вариант, через синоним. В первом варианте как Вы писали, синоним пустой.

Смотрим пост №1

BaskakoF пишет:

Компилятор принимает два разных способа описания типа, а какой из них более правильный?

typedef union U1_TYPE { byte  b[16];  int  w[8];};
U1_TYPE b10, b11;

typedef union  { byte  b[16];  int  w[8];}U2_TYPE;
U2_TYPE b20, b21;

Вопрос2: на какой аналог  можно заменить в C++  typedef ?

Вы их что снизу вверх считаете?

Я к первому (верхнему) варианту с явным именем класса приписал определение указателя. Кстати, ко второму (нижнему) тоже можно - никакой разницы. Т.е. указатель можно определить в любом случае.

Другое дело нахрена ТС это вообще надо.

Первый (верхний) вариант содержит совершенно лишнее слово typedef - убери его - ничего не изменится (с точки зрения разработчика). Второй (нижний) зачем-то определяет безымянный класс и вводит ему синоним. Нафига?

Разница, конечно, есть, но не для разработчика - большинство разработчиков этой разницы просто не видят - тут нужен другой уровень понимания языка.

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Похоже это вопрос первичности. Если в стакан наполнен половиной жидкости, то что первично : наполовину-полнота или наполовину-пустота. Если из стакана надпили ,то полнота первична, а вот если недолили, то пустота. А просто увидев такой стакан нельзя сказать что первично, нужно другое понимание сущности.

Logik
Offline
Зарегистрирован: 05.08.2014

Размер поста ЕвгенийП растет, как всегда попытка заговорить  вопрос, утопить в объеме и размыть смысл. Напомню жду код у которого как в первом "пустой синоним" но при " позволяет сразу описать и указатель на юнион."

///большинство разработчиков этой разницы просто не видят 

Это точно. Только Вы видете то чего нет.

ПС. Просто пишите код, если знаете как, с описанием юниона и указателя на него в рамках одной конструкции без синонимов, как в первом варианте ( Вы ж писали "В первом варианте .. И назначили этому имени пустой синоним." - вот пусть и останется пустым). Не плодите срачь не разводите пи.деж.  Просто пример кода.

Logik
Offline
Зарегистрирован: 05.08.2014

qwone пишет:

Похоже это вопрос первичности. Если в стакан наполнен половиной жидкости, то что первично : наполовину-полнота или наполовину-пустота. Если из стакана надпили ,то полнота первична, а вот если недолили, то пустота. А просто увидев такой стакан нельзя сказать что первично, нужно другое понимание сущности.

Не. Здесь вопрос выбора из двух допустимых вариантов, один из которых всеж несколько сильней. Полезен для выработки стиля.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Дорогой Logik, первый пример отличается от второго тем, что в первом указано имя класса после слова union, а во втором нет.

Вы ДОБАВИЛИ объявление указателя во второй и почему-то сказали, что этого нельзя сделать с первым. Я точно также добавил объявление указателя в первый (причем как таковой синоним (без указателя) не добавлял).

Если это не то, чего Вы ожидали, мне жаль. Другого кода у меня для Вас нет.

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

Logik
Offline
Зарегистрирован: 05.08.2014

Ну да, стабильность - признак класса, как фигню утверждать и мозг выносить, так ЕвгенийП, первый, а как код под свои утверждения  привести так "Другого кода у меня для Вас нет." Ну ниче, не растраивайтесь. Глядиш кто чего придумает а Вы как обычно ;) 

ПС. А Вы сами вобще код пишите или только других учить пытаетесь?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Послушайте логик.Давайте по логике

1. Вы сказали, что второй вариант луше, т.к. можно объявить указатель. И приписали ко "второму варианту ТС" объявление в конце перед точкой с запятой.

2. Я сказал, что указатель можно объявить и с первым вариантом и точно также приписал к "первому варианту ТС" объявление в конце перед точкой с запятой. Чем показал, что Ваше заявление о том, что второй вариант лучше - беспочвенно.

Какого рожна Вам ещё надо? Всё, что я сказал, я однозначно подтвердил кодом.

Уверен, что Вы понимаете, что не правы, но признать это не позволяет религия. Да, не надо, не признавайте, мне пофигу, абсолютно. Я уже сказал, что это проблема Ваша и Вашего психиатра.

Считаю тему закрытой. Холивара не будет. С некоторых пор я взял на вооружени метод Овечкина и в холиварах не участвую.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

ЕвгенийП пишет:
Холивара не будет.

блин! и, шо теперь делать с ведром попкорна?