Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.182.179] |
|
Страницы: (15) « Первая ... 12 13 [14] 15 все ( Перейти к последнему сообщению ) |
Сообщ.
#196
,
|
|
|
Цитата Qraizer @ Нет, это граф-двиг для обычного писюка. Порт ни на какие древние компили не задумывался.Например, порт проекта на старый компиль. Добавлено 6 минут назад Или на недокомпиль для микроконтроллера. Или даже наноконтрольчика. Цитата Бобёр @ Если бы это была сяшечка или древний прожект я бы понял, но тут C++ и 2015-год. А вообще так многие делают. Например, glib. "ядро" - на plain-C без прикрас, а зато потом каждый сможет замутить биндинг под любой язык - и наслаждаться. |
Сообщ.
#197
,
|
|
|
Новый проект?
Ну, видимо, с авторами что-то не так |
Сообщ.
#198
,
|
|
|
Может им важна разрядность типов. Если будут портировать проект на платформу с не 32-разрядным int, меньше изменений делать.
|
Сообщ.
#199
,
|
|
|
Цитата D_KEY @ Я тоже так думаю.Ну, видимо, с авторами что-то не так Цитата Kray74 @ Я же написал - обычный писюк. А для точной разрядности давно уже введены соответствующие типы - http://www.cplusplus.com/reference/cstdint/ Может им важна разрядность типов. Если будут портировать проект на платформу с не 32-разрядным int, меньше изменений делать. |
Сообщ.
#200
,
|
|
|
Иногда хочется поиграться разрядностью помимо стандартных способов. Ну, в общем, эдакое поле для экспериментов в общем.
|
Сообщ.
#201
,
|
|
|
Цитата Бобёр @ А можно пример таких игр? Иногда хочется поиграться разрядностью помимо стандартных способов. Ну, в общем, эдакое поле для экспериментов в общем. |
Сообщ.
#202
,
|
|
|
Цитата Решение под спойлером, если вдруг кто захочет сам попробовать написать.Дана строка символов. Напишите цикл, за один проход удаляющий из неё все пробелы. Скрытый текст for (char *p = str; *p != '\0'; p += *p!=' ') *p = *(str += *str==' ')++; |
Сообщ.
#203
,
|
|
|
Цитата Qraizer @ Такие мысли:есть или нет в этом решении неопределённое поведение? 1.str может портиться (меняться), а вначале подумалось, что ввод 'p' избавит от этого. 2.К char* добавляется bool, что как бы не шибко красиво. |
Сообщ.
#204
,
|
|
|
Это всё не попадает под неопределённое поведение, Славян. А вот двойное изменение str во второй строке теоретически попадает. Однако у меня такое впечатление, что конкретно тут неопределённого поведения всё-таки нет.
|
Сообщ.
#205
,
|
|
|
В любом случае это говнокод. Да и ситуации, когда приходится разбирать, UB тут или нет, уже как правило не лучше UB.
|
Сообщ.
#206
,
|
|
|
Цитата Qraizer @ Согласен. Просто мысли такие были. Это всё не попадает под неопределённое поведение Цитата Qraizer @ Я тоже подумал, что кто-то реализует char в каком-нибудь контроллере как столько-то байтовый, а bool как столько-то. И понеслось... Но, в x86 ГОСТе, всё пока нормуль. А вот двойное изменение str во второй строке теоретически попадает. Однако у меня такое впечатление, что конкретно тут неопределённого поведения всё-таки нет. |
Сообщ.
#207
,
|
|
|
D_KEY, видишь ли... ты будешь смеяться, наверно... да и не только ты. Прикол в том, что это самое UB в выражениях у меня уже в рефлексах. Когда это написал, вообще не думал ни о чём. И вдруг спустя пару минут увидел двойное изменение str. Удивился, почему рефлекс не сработал. Смотрел внимательно, вроде всё на месте... но рефлекс теперь уже говорит, что тут нет UB.
Как-то так, в общем... |
Сообщ.
#208
,
|
|
|
Цитата Славян @ Я тоже подумал, что кто-то реализует char в каком-нибудь контроллере как столько-то байтовый, а bool как столько-то. И понеслось... Не понеслось. bool преобразуется к целочисленному типу (false=0, true=1) и складывается с указателем. Размеры char и bool не играют никакой роли. |
Сообщ.
#209
,
|
|
|
Цитата Kray74 @ true=1 Можно пруф? |
Сообщ.
#210
,
|
|
|
Тип bool вообще-то существует в двух ипостасях. Один - это обычно результат сравнения. Фактически это даже не данные, а точка перехода в программе. Такой bool при преобразовании однозначно переводится в числа 0 и 1. И такие же значения запоминаются в переменных. В Си результатами сравнений и логических операций были целые 0 и 1. В некоторых языках не так, и логические операции могут применяться к любым данным, давая результат соответствующего типа
Второй bool - это результат преобразования значения произвольного типа в логическое значение. Формально это результат выражения (v!=0), и компилятор должен привести результат к той же паре чисел. По крайней мере для сохранения читаемости программ следует заменять все ненулевые значения на 1. Так ли это в стандарте? |