Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2017, 20:27   #41
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
а теперь пишите, что этого еще нужно добиться.
совершенно верно.
ограничение платформы никто не отменял.

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Стек маленький был.
стек не причем.
массив был расположен в статической области памяти
(глобальный)

Цитата:
Сообщение от Croessmah Посмотреть сообщение
А зддравый смысл подсказывает, что надо думать самому.
аха.
думать самостоятельно,
зачем использовать знаковые типы
для изначально положительных величин.

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Кстати, вот еще глупцы такие же правила написали в Google C++ Style Guide:
https://google.github.io/styleguide/...#Integer_Types
Люди, не дружащие со здравым смыслом (среди них Александресску, Саттер, Страуструп, Майерс и т.д.), тоже говорят о том же самом:
https://www.youtube.com/watch?v=Puio5dly9N8#t=733

Danger – unsigned types used here!
Why are unsigned integers error prone?
Если просто обобщить, то увеличивается число возможных ошибок,
поэтому обращение с беззнаковыми числами требует
больших усилий и большей осторожности.
Но это относится к любому аспекту языка,
который чреват ошибками, например, голым указателям.
это бред.
для функции вида:
Код:
void foo(const size_t);
отрицательных чисел не существует в принципе.
туда уже нельзя передать отрицательное число.
соответственно и диагностировать нечего.

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

то бишь вы этим себе только гемморой создаете дополнительный.


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

вы же выше писали, что думать нужно своей головой.
вот и приведите хотя бы один пример из своей головы,
где знаковый индекс может дать профит,
пересиливающий издержки на все эти дополнительные проверки,
и гемморой связанный с неизбежным конфликтом:
сравнение знаковых с беззнаковыми.
_Bers вне форума Ответить с цитированием
Старый 30.07.2017, 20:34   #42
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Еще большей глупостью является слепое следование за не авторитетом.
я не призываю следовать ни за авторитетами,
ни за не авторитетами.

я призываю следовать за здравым смыслом.
и в отличие от вас не ссылался на авторитеты.

выше вы писали, что нужно думать своей головой.
но почему тогда вы до сих пор не смогли из своей головы дать ответ,
на казалось бы простой вопрос:
"зачем использовать знаковый тип
для хранения изначально беззнаковых величин?"

проблема разности указателей,
как и проблема максимально возможного размера массивов ортогональна этому вопросу.

и существует вне зависимости от того,
что именно вы используете в качестве индекса.


вы не привели мне никакого обоснования.
ни одного примера-иллюстрации,
где это может дать профит.

все, чего мне удалось от вас добиться - ссылки на авторитетов.
на Страуструпа и компанию.

которые так же не приводят никакого обоснования.

их лепет про диагностику ошибок не выдерживает никакой критики.

в то время, как с их же лёгкой руки,
мы видим:

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

двойные стандарты?

Последний раз редактировалось _Bers; 30.07.2017 в 20:39.
_Bers вне форума Ответить с цитированием
Старый 30.07.2017, 20:50   #43
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
это бред.
Да уже понятно. Это называется я у мамы особенный.

Цитата:
Сообщение от _Bers Посмотреть сообщение
вся ихняя улучшенная диагностика
Призвана предупредить о проблемах использования беззнаковых.

Цитата:
Сообщение от _Bers Посмотреть сообщение
пересиливающий издержки на все эти дополнительные проверки
Написал же выше - требуется большая осторожность в обращении.
Меньший шанс ошибки часто перевешивает любые другие бонусы.

Цитата:
Сообщение от _Bers Посмотреть сообщение
сравнение знаковых с беззнаковыми
Этих конфликтов избежать не удастся.
Croessmah вне форума Ответить с цитированием
Старый 30.07.2017, 21:07   #44
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
все, чего мне удалось от вас добиться - ссылки на авторитетов.
У Вас своё мнение, у них своё. Вы их не поняли. А я виноват что ли?
Почему бы не спросить у этих самых авторитетов?
Цитата:
Сообщение от _Bers Посмотреть сообщение
"зачем использовать знаковый тип
для хранения изначально беззнаковых величин?"
Цитата:
Сообщение от _Bers Посмотреть сообщение
но почему тогда вы до сих пор не смогли из своей головы дать ответ
А почему я должен что-то придумывать?
Вы написали свой пост, я ему противопоставил текст из гадлайнов
и ссылки на людей, знания и опыт которых всем известны.
Я не выражал ни своих мыслей, ни своих убеждений.
Вы попросили какие-то примеры и объяснений,
я привел ссылки в которых также рассказывается
о типичных ошибках использования беззнаковых.
Из всех этих текстов я сделал краткий вывод текстом.
К слову, я сам использую unsigned типы для размеров и индексов,
и прекрасно знаю в какую хрень может превратиться код,
когда нужна будет и signed и unsigned арифметика,
поэтому я прекрасно понимаю о чем говорят авторы в этом плане.
Сам я всё равно буду делать так, как считаю нужным (ну или как прикажут).

Вы не терпите, когда кто-то думает по-другому?
Пытаетесь донести свою "истину" до всех?
Все кто с Вами не согласен - пишут бред?
Ну и смысл с Вами тогда общаться?
Croessmah вне форума Ответить с цитированием
Старый 30.07.2017, 21:17   #45
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Да уже понятно. Это называется я у мамы особенный.
бред - неадекватное поведение.
не соответствующее объективной реальности.

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Призвана предупредить о проблемах использования беззнаковых.
нет никаких "проблем беззнаковых",
о которых мог бы предупредить знаковый тип.

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

или приведите пример.
[/QUOTE]


Цитата:
Сообщение от Croessmah Посмотреть сообщение
Написал же выше - требуется большая осторожность в обращении.
Меньший шанс ошибки часто перевешивает любые другие бонусы.
да не нужна там никакая большая осторожность.
знаковые не являются "более безопасными".

заставь дурака богу молиться, он себе лоб расшибет.
что со знаковыми, что с беззнаковыми.

вы не сможете привести ни одного примера,
который иллюстрировал бы опасность беззнаковых
в сравнении с знаковым.

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

я уже приводил пример:
вам придется использовать дополнительные проверки.
это и есть борьба с проблемой,
которую вы сами же и с провоцировали.
Код:
// примичание: несмотря на то,
// что прототип функции разрешает вам использовать отрицательные числа
// тем не менее, отрицательные числа запрещены
// специально для этого,
// там внутри у нас 100500 проверок на каждый чих стоит
// почему мы сразу не использовали беззнаковый?
// потому что Страуструп сказал
void foo(int);
Цитата:
Сообщение от Croessmah Посмотреть сообщение
Этих конфликтов избежать не удастся.
такое случается за гранью здравого смысла.

в грамотном коде,
с использованием грамотных библиотек,
обычно не случается.

что характерно, профессиональные инструменты,
такие как boost (pugixml, expat, еtс)
перечислять можно долго.
ну так вот, они проблем не создают.

максимум с чем сталкивался:
ворнинг: unsigned vs size_t
(эти типы имеют право иметь различную разрядность,
поэтому, компиляторы агрятся точно так же,
как при отношениях между знаковыми/беззнакомыми)

Саттер - этот вообще агент влияния от Майкрософт.
он - член комитета.

что же это Страуструп с Саттером втирают одно,
а для языка и стандартной библиотеки сделали другое?

ваши авторитеты пудрят вам голову.
_Bers вне форума Ответить с цитированием
Старый 30.07.2017, 21:43   #46
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
У Вас своё мнение, у них своё. Вы их не поняли. А я виноват что ли?
Почему бы не спросить у этих самых авторитетов?
я прекрасно их понял.
и нашел их доводы необоснованными.


Цитата:
Сообщение от Croessmah Посмотреть сообщение
А почему я должен что-то придумывать?
Вы написали свой пост, я ему противопоставил текст из гадлайнов
и ссылки на людей, знания и опыт которых всем известны.
Я не выражал ни своих мыслей, ни своих убеждений.
Вы попросили какие-то примеры и объяснений,
я привел ссылки в которых также рассказывается
о типичных ошибках использования беззнаковых.
Из всех этих текстов я сделал краткий вывод текстом.
вы и не должны.
если не хотите.

однако, интересует ваше мнение.
а не мнение ханжей.

с примерами-иллюстрациями,
которые демонстрируют профит.

Цитата:
Сообщение от Croessmah Посмотреть сообщение
К слову, я сам использую unsigned типы для размеров и индексов,
и прекрасно знаю в какую хрень может превратиться код,
когда нужна будет и signed и unsigned арифметика,
поэтому я прекрасно понимаю о чем говорят авторы в этом плане.
Сам я всё равно буду делать так, как считаю нужным (ну или как прикажут).
ну так расскажите, о чем они говорят.

я вот считаю, что они говорят туфту.

например вот это:

Код:
void foo(const uint16_t* reading, const size_t size) {
  size_t i;
 for (i = size - 1; i >= 0; --i) {
демонстрирует не понимание матчасти.
очевидно, что с беззнаковыми нельзя обращаться так же,
как со знаковыми.

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

от таких ошибок Страуструп призывает защищаться?
потому что для людей, которые так глупо влетают,
проблема "знаковые/беззнаковые" меньшая из.

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Вы не терпите, когда кто-то думает по-другому?
напротив, я люблю людей, которые думают иначе.
более того - именно такие и представляют
для меня особый интерес.

мне нравится узнавать новое.

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

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Пытаетесь донести свою "истину" до всех?
нет.
я всего лишь задал вопрос:
в чем смысл использовать знаковый тип для величин,
которые по смыслу не могут быть отрицательными?

а так же привел довод:
теперь вам придется постоянно проверять,
не является ли число отрицательным,
а так же разгребать конфликты знаковых/беззнаковых
с той же стандартной библиотекой.


Цитата:
Сообщение от Croessmah Посмотреть сообщение
Все кто с Вами не согласен - пишут бред?
а вы стало быть такого мнения обо мне?
ну-ну.

мне нужно не "согласие/несогласие".
мне нужно "обоснование".

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

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

так с чем тут конкретно можно соглашаться,
или не соглашаться?

забавно, не правда ли?
Цитата:
Сообщение от Croessmah Посмотреть сообщение
Ну и смысл с Вами тогда общаться?
да я как бе не навязываюсь.
люди со мной общаются,
потому что находят меня здравомыслящим.
_Bers вне форума Ответить с цитированием
Старый 31.07.2017, 07:07   #47
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Вот развели то. Проверки так и так будут, что со знаками, что без. Захотите изменить размер коллекции - нужно проверить, что размер > 0 и без разницы знаковый он или нет. При доступе к элементу по индексу тоже будет проверка. Для беззнаковых одна - только на правую границу, для знаковых - две. Со знаковым типом из функции поиска индекса элемента просто можно вернуть -1, если элемента нет. С беззнаковым или кидать исключение или возвращать итератор (тогда нужно, чтобы в итераторе был индекс элемента) или еще как мудрить.
Лично я не вижу, чтобы какой-то из вариантов откровенно был лучше всегда и всюду. Главное - чтобы в целом код был норм, без кастований постоянных и непонятных конструкций.
pu4koff вне форума Ответить с цитированием
Старый 31.07.2017, 10:07   #48
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
С беззнаковым или кидать исключение или возвращать итератор (тогда нужно, чтобы в итераторе был индекс элемента) или еще как мудрить.
Стандартная практика - возвращение максимального значения для типа.
Т.к. отсчет у нас с нуля, то индекс не может быть равен такому числу.

Цитата:
Сообщение от _Bers Посмотреть сообщение
так глупо влететь может если только школьник,
после первой недели изучения языка.
Пока оно в таком виде - конечно.
Но этот цикл описывает ошибку, а не конкретный случай.
Вот так уже не получится:
Код:
for (i = size - 1; i >= get_dynamic_value(); --i)
Придется усложнять цикл.
Но дело в том, что глупые ошибки имеют место быть у всех.
Чем меньше мест где их можно совершить, тем лучше.

Цитата:
Сообщение от _Bers Посмотреть сообщение
в чем смысл использовать знаковый тип для величин,
которые по смыслу не могут быть отрицательными?
Значения их не могут быть отрицательными,
но, очень вероятно, что дальше они будут
участвовать в знаковых вычислениях.
Croessmah вне форума Ответить с цитированием
Старый 31.07.2017, 22:15   #49
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Пока оно в таком виде - конечно.
Но этот цикл описывает ошибку, а не конкретный случай.
Вот так уже не получится:
Код:
for (i = size - 1; i >= get_dynamic_value(); --i)
не понял, что за get_dynamic_value()

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

Код:
// при уменьшающем цикле беззнаковых
// нужно сравнивать с size
for(auto i = size-1; i<size; --i)
когда i улетит за ноль, оно переполниться,
и станет больше (или равно), чем size.
цикл оборвется.

подмешивайте в неё любые свои дополнительные условия,
если они вам нужны.

а они взяли цикл для знаковых.
воткнули туда беззнаковые.

и потом такие: ай яй яй! смотрите как легко ошибиться!
так и хочется сказать:
чуваки вы башкой вообще думаете?

а то ведь с таким подходом знаковые зафейлят на "беззнаковом цикле".
ай яй яй! а знаковые то оказывается ошибки провоцируют!
вот были бы беззнаковые, то на беззнаковым цикле бы
и не было бы никаких проблем.

маразм крепчал в общем.

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Значения их не могут быть отрицательными,
но, очень вероятно, что дальше они будут
участвовать в знаковых вычислениях.
практически никогда.
подавляющая часть кейсов вообще беззнаковая.
но если где и нужны знаковые, то там обычно знаковые идут во все поля
(математические вычисления, например)

99,999% всех конфликтов с которыми я сталкивался:
на стыке "сравнение знаковых с беззнаковыми".
как раз таки последствие неразумного подхода,
когда человек использовал знаковый там,
где изначально был нужен беззнаковый.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык Си - массивы leonid_spartak Помощь студентам 1 12.05.2017 09:30
Массивы.Язык Си Caca0 Помощь студентам 26 05.02.2013 00:10
массивы. язык СИ. skauzer_blr Помощь студентам 8 10.04.2012 22:15
Массивы, язык - C. xcyber Помощь студентам 9 19.10.2009 21:38
Массивы (язык С++) Ноберт Помощь студентам 3 24.08.2009 23:10