Правильное объявление union
- Войдите на сайт для отправки комментариев
Сб, 17/06/2017 - 22:34
Компилятор принимает два разных способа описания типа, а какой из них более правильный?
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 ?
Вопрос2: на какой аналог можно заменить в C++ typedef ?
Я union-ами не пользуюсь. Как то нет в них большой надобности. Опять же над С++ есть еще надстройка ООП (объектно-оринтированое программирование) Там идут разные способы которые решались бы union-ами
Компилятор принимает два
Гораздо больше на самом деле
какой из них более правильный?
Это как спрсить у ребёнка: "Кого ты больше любишь, маму или папу?"
Так как Вы написали - оба немного кривовато, но оба правильно.
В первом варианте Вы завели класс U1_TYPE. И назначили этому имени пустой синоним. Зачем? Непонятно. Либо там лишнее слово typedef, либо нужно добавить имя синонима в конце перед ";". Хотя и так имеет право на жизнь.
В втором варианте Вы завели безымянный класс и назначили ему синонимом слово U2_TYPE. Опять же неясно зачем было заводить класс безымыянным. Хотя. опять же, имеете право.
Я не говорю, что это бессмысленно. Иногда это нужно (безымянные классы и синонимы), но Вы, похоже, делали это неосознанно, просто так получилось.
Вопрос2: на какой аналог можно заменить в C++ typedef ?
Неясна цель такой замены, а потому и нечего сказать.
Оба рабочих. Применяйте второй т.к. он позводяет сразу описать и указатель на юнион. Получится так
Применяйте второй т.к. он позводяет сразу описать и указатель на юнион. Получится так
Я код привел. Вам известен известен аналог для первого - показуйте.
Вы меня троллите? Ну, показать-то нетрудно, только я что-то не понял в чём подвох и где меня "окунут" :)
Так это и есть второй вариант, через синоним. В первом варианте как Вы писали, синоним пустой.
Так это и есть второй вариант, через синоним. В первом варианте как Вы писали, синоним пустой.
Смотрим пост №1
Компилятор принимает два разных способа описания типа, а какой из них более правильный?
Вопрос2: на какой аналог можно заменить в C++ typedef ?
Вы их что снизу вверх считаете?
Я к первому (верхнему) варианту с явным именем класса приписал определение указателя. Кстати, ко второму (нижнему) тоже можно - никакой разницы. Т.е. указатель можно определить в любом случае.
Другое дело нахрена ТС это вообще надо.
Первый (верхний) вариант содержит совершенно лишнее слово typedef - убери его - ничего не изменится (с точки зрения разработчика). Второй (нижний) зачем-то определяет безымянный класс и вводит ему синоним. Нафига?
Разница, конечно, есть, но не для разработчика - большинство разработчиков этой разницы просто не видят - тут нужен другой уровень понимания языка.
Похоже это вопрос первичности. Если в стакан наполнен половиной жидкости, то что первично : наполовину-полнота или наполовину-пустота. Если из стакана надпили ,то полнота первична, а вот если недолили, то пустота. А просто увидев такой стакан нельзя сказать что первично, нужно другое понимание сущности.
Размер поста ЕвгенийП растет, как всегда попытка заговорить вопрос, утопить в объеме и размыть смысл. Напомню жду код у которого как в первом "пустой синоним" но при " позволяет сразу описать и указатель на юнион."
///большинство разработчиков этой разницы просто не видят
Это точно. Только Вы видете то чего нет.
ПС. Просто пишите код, если знаете как, с описанием юниона и указателя на него в рамках одной конструкции без синонимов, как в первом варианте ( Вы ж писали "В первом варианте .. И назначили этому имени пустой синоним." - вот пусть и останется пустым). Не плодите срачь не разводите пи.деж. Просто пример кода.
Похоже это вопрос первичности. Если в стакан наполнен половиной жидкости, то что первично : наполовину-полнота или наполовину-пустота. Если из стакана надпили ,то полнота первична, а вот если недолили, то пустота. А просто увидев такой стакан нельзя сказать что первично, нужно другое понимание сущности.
Не. Здесь вопрос выбора из двух допустимых вариантов, один из которых всеж несколько сильней. Полезен для выработки стиля.
Дорогой Logik, первый пример отличается от второго тем, что в первом указано имя класса после слова union, а во втором нет.
Вы ДОБАВИЛИ объявление указателя во второй и почему-то сказали, что этого нельзя сделать с первым. Я точно также добавил объявление указателя в первый (причем как таковой синоним (без указателя) не добавлял).
Если это не то, чего Вы ожидали, мне жаль. Другого кода у меня для Вас нет.
По поводу чего и кто видит, это старая песня не начинайте. Все мы чего-то не знаем, но Вы при этом считаете, что то чего Вы не знаете - не существует в природе. Это проблема Ваша и Вашего психиатра, я не буду этим заниматься.
Ну да, стабильность - признак класса, как фигню утверждать и мозг выносить, так ЕвгенийП, первый, а как код под свои утверждения привести так "Другого кода у меня для Вас нет." Ну ниче, не растраивайтесь. Глядиш кто чего придумает а Вы как обычно ;)
ПС. А Вы сами вобще код пишите или только других учить пытаетесь?
Послушайте логик.Давайте по логике
1. Вы сказали, что второй вариант луше, т.к. можно объявить указатель. И приписали ко "второму варианту ТС" объявление в конце перед точкой с запятой.
2. Я сказал, что указатель можно объявить и с первым вариантом и точно также приписал к "первому варианту ТС" объявление в конце перед точкой с запятой. Чем показал, что Ваше заявление о том, что второй вариант лучше - беспочвенно.
Какого рожна Вам ещё надо? Всё, что я сказал, я однозначно подтвердил кодом.
Уверен, что Вы понимаете, что не правы, но признать это не позволяет религия. Да, не надо, не признавайте, мне пофигу, абсолютно. Я уже сказал, что это проблема Ваша и Вашего психиатра.
Считаю тему закрытой. Холивара не будет. С некоторых пор я взял на вооружени метод Овечкина и в холиварах не участвую.
блин! и, шо теперь делать с ведром попкорна?