Pull to refresh
-2
0

Developer C++

Send message

Это как раз хрестоматийный пример UB, см. случай Uninitialized scalar здесь.

Uninitialized scalar

std::size_t f(int x)
{
    std::size_t a;
    if (x) // either x nonzero or UB
        a = 42;
    return a;
}

В четвёртой строке нет никакого UB. и в этой функции нет UB. UB возможно при использовании значения, которое вернёт эта функция, потому, что она может вернуть мусор, если её об этом попросят передав ей 0. Может быть разработчик хочет получить случайное число в этом случае, а вы утверждаете, что это UB. А может он хочет узнать, что было на стеке в данном месте за мгновение до вызова и он это с некоторой вероятностью узнает.

Да? А я думал, что место в памяти выделяется в строке:

} value32;

и дальше мы можем делать сней что угодно.

which implies that if T2's alignment requirement is not stricter than T1's,
the value of the pointer does not change and conversion of the
resulting pointer back to its original type yields the original value

Размер и выравнивание int и float одинаковые.

In any case, the resulting pointer may only be dereferenced safely if allowed by the type aliasing rules (see below)

Смотрим ниже:

union U { int a; double b; } u = {0};

...

int* p3 = reinterpret_cast<int*>(&u); // value of p3 is "pointer to u.a": // u.a and u are pointer-interconvertible   double* p4 = reinterpret_cast<double*>(p3); // value of p4 is "pointer to u.b": u.a and // u.b are pointer-interconvertible because // both are pointer-interconvertible with u  

Ещё более жёсткий пример, чем int и float должен работать нормально.

А чтение из неактивного члена union'а — является.

Укажите на строку в которой UB:

union {
	float f;
	uint32_t i;
} value32;

float f = value32.f;
uint32_t i = value32.i;

Ответ тот же:

По вашей ссылке куча примеров отстрела ноги (при чём не всегда отстрела), но она не является релевантной к прокомментированным мной кускам кода приведённых автором статьи, т.к. описивыет использование значений. В том, что прокомментировал я значения не используются. А существуют варианты использования этих значений эффективно и безопасно.

Если вы хотите обсудить конкретный пример (там их много) по вашей ссылке, укажите на него.

По вашей ссылке куча примеров отстрела ноги (при чём не всегда отстрела), но она не является релевантной к прокомментированным мной кускам кода приведённых автором статьи, т.к. описивыет использование значений. В том, что прокомментировал я значения не используются. А существуют варианты использования этих значений эффективно и безопасно.

Если вы хотите обсудить конкретный пример (там их много) по вашей ссылке, укажите на него.

  • uint32_t i = *reinterpret_cast<uint32_t*>(&f)

  • uint32_t i = *(uint32_t*)&f;

Если f это float f; и если это не какая-нибудь экзотическая архитектура, то конкретно в этих строках UB нет.

  • Трюк с union:

    union {
    	float f;
    	uint32_t i;
    } value32;
    

    Сам по себе такой код не UB, но беда в том, что чтение из union-поля, в которое вы перед этим ничего не писали — это тоже UB.

Само по себе чтение из неинициализированной переменной не является UB.

Во всех случаях проблем с памятью нет. Всё зависит от того как вы собираетесь использовать этот код. Впрочем, как и любой другой в C/C++.

Что удобнее для содержимого папки, то и используется.

Вот именно! Но проводник - сомнительный файл-менеджер. Существуют ещё файл-менеджеры с двумя панелями и многими вкладками (на заметку). Допускаю единственное примененте проводника как галереи.

Там, где много элементов вы применяете список или таблицу и это правильно, потому, что на единицу площади экрана входит больше информации, удобно работать с отсортированными элементами, нет громадных никчёмных иконок, коих с успехом заменяют расширеня файлов. Надеюсь, у вас они включены.

Дерево файловой системы имеет директории и файлы потому, что это удобно, можно как в шкафу разложить всё по полочкам, а не валить всё на пол. При этом каждая директория, в идеальном случае имеет говорящее название, прочитав которое, становится ясно идти в неё или нет. Сложность O(log n) вместо O(n), если вам это о чём-то говорит.

Выше сказанное справедливо и для меню Пуск, и для меню приложений. Удобно проваливаться по дереву с говорящими названиями: "Вид", Настройки", " Инструменты", "О приложении", " Игры", "Интернет"...

Я не против негипертрофированных панелей с кнопками/иконками в приложениях и меню Пуск. Но когда Пуск из дерева (в семёрке) превращается в помойку (в десятке), единственный вариант использования, которой - вбивать текст в строку поиска, возникает вопрос: " Зачем в нём всё остальное?!". Тоже самое относится и к офису. Повышается порог входа для пользователя. Надо знать/изучать/настраивать переусложнённые панели. При высоком пороге входа пользователь разворачивается и уходит в приложение, в котором порог входа ниже.

Обратите внимание на IDE. Есть там такая же шняга как в офисе? Нет. Потому, что программистам нужна эффективность, а не рюшечки.

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

Затеяли дискуссию, допытываетесь "что да почему?". И на наводящие вопросы, кстати, имеющие самое непосредственное отношение к теме не отвечаете. Просто вам невдомёк, видимо, что за отношение. Не конструктивно. Я же не фамилию у вас спрашиваю. Впрочем, как хотите.

Но, положа руку на сердце, установка бинарного, как правило, софта, на
Windows сильно проще установки из исходников (как правило) под Linux.
Правда, когда надо устанавливать из исходников под Windows, это вообще
ужас.

Если хочется ехе как в винде, то в линуксе есть AppImage.

Так о каких различиях-то речь вы так и не сказали? А то наговорили всякого, а когда от вас пруфов попросили, так сразу
включили вот это вот "вы все тупые и не лечитесь, ваше дело страдать, а
мне с вами не по пути".

Вы не ответили на мой вопрос двумя постами ранее:

А вы каким видом пользуетесь в проводнике? Значки или список?

Поэтому и не ответил.

Ну так конечно хорошо, если всё подчистую попижжено из Windows. И "Пуск"
очень виндовый, и даже элементы точно в тех же местах. И Либре это ваше
прямо ниточка в ниточку с продукта Microsoft слизали. Правда дальше
интерфейса 2003 года почему-то не смогли, но то такое.

Значит для микрософта звёздный час был в 2003 году, а потом деградация. Подайте в патентный суд и денег выиграйте.

Да и то, ещё больший вой поднимется: как же так, за меня решили как программа должна выглядеть.

Программа для кого пишется? Для пользователя. Значит и для меня в частности. Не нравится порограмма пользователю - он ищет альтернативу, если разработчик не желает слышать пользователя.

Если люди за чёртовых 10+ лет не смогли приспособиться...

Вам нравится приспосабливаться - приспосабливаймесь. А я уже много лет сижу в Линуксе. Там всё хорошо по умолчанию:

Вас лично в линукс не зову. Топите за винду - в ней и с идите. За меня не переживайте.

Всего хорошего!

Линукс так же умеет. В моём кейсе образ диска с интел-ноута загрузился на амд-десктопе. И даже ничего не обновлял. Просто как обычно загрузился.

А ещё много раз переносил домашнюю директорию пользователя на разное железо и дистрибутивы линукс и всё работало, включая настройки приложений.

Сетевая карта не проблема. Купил свежий ноут НР. Воткнул вифи-свисток, через него поставил Линукс Минт. Потом в UI ОС мышкой обновил ядро и сетевая карта заработала.

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

При чём единственно чем они функционально отличаются - цветом фона. И расположением вертикальным а не горизонтальным. Всё. Ну то есть вообще
всё. О каких ужасных различиях речь?

А вы каким видом пользуетесь в проводнике? Значки или список?

Так они же сворачиваются по нажатию одной кнопки, не?

Не знаю была ли она в те времена, но никто о её существовании не знал и все мучались. Лучше бы оставили старый интерфейс по умолчанию с возможность включить новый.

А чтобы найти что надо даже строку поиска сделали.

Это, конечно, позитивно, но каждый раз искать поиском вместо двух кликов мышью неэффективно.

Вот! Ламповое семёрочное меню "Пуск" справа - понимаю! А то г..., что слева - не понимаю. )

Про офис, не помню какая версия и в каком году появился, в котором вместо привычных менюшек в одну строку появились здоровенные кнопки могу сказать, что я и все в моём окружении плевались от того, что не могли найти то, что было легко доступно ранее. Оптимально - строка меню и отдельно одна строка с мелкими кнопками. В меню кнопок не должно быть.

Полнлностью поддерживаю людей, которым не нравится когда ОС не найдя в меню пуск приложение сразу лезет в интернет.

А я от винды испытываю уже не усталость, а отторжение. Любую десктопную ОС на предмет пригодности для домохозяйки можно оценить по двум вещам:

  1. Меню "Пуск" должно выглядеть как в семёрке или в Cinnamon. Но недавно открыл для себя WM i3. Теперь мне уже и меню "Пуск" не нужно, чего и всем желаю.

  2. В офисных программах длжны быть не большие кнопки с картинками и, как следствие, интуитивно непонятным интерфейсом, а менюшки, обыкновенные менюшки со словами. И есть ещё пожелание для разработчиков приложений добавить поисковую строку для поиска по меню.

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

А здесь уже начинают действовать дедлайны. Делают то, на что выделено время. Шаг влево, шаг вправо - расстрел. Контроль свободного пространства в ПЗУ это отдельная фича, это не задача разработкти логов. Когда перед разработчиком ставится задача сходить в туалет зачастую там нет даже унитаза. Хорошо, если фановая труба есть... А сроки никто не отменял.

Печально, что разработчику ПО для АЭС нечего сказать по третьему пункту.

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Registered
Activity

Specialization

Backend Developer