OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 20 Сентябрь, 2020 14:58

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Четверг, 18 Октябрь, 2007 15:23 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4593
Откуда: Россия, Орёл
Сергей Губанов писал(а):
В результате во время выполнения программы появился "мусор в памяти".
Мусор? Однако, возможно, enum трактовался как int, у std::string есть конструктор от int-а, и тогда созданный string присвоился, а потом удалился, т. е. никакого мусора, т. к. компилятор должен был уничтожить этот временный string.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Четверг, 18 Октябрь, 2007 16:20 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Компилятор MS VS 2005 это дело прекрасно скомпилировал, не смотря на то, что переменная ps.symbol имеет тип enum, а не std::string.


С типами здесь все хорошо, они преобразовались по всем правилам неявного преобразования типов. Проблема в дизайне std::string (если соответствующий конструктор у нее не explicit). Впрочем это далеко не единственная проблема std::string.

Сергей Губанов писал(а):
В результате во время выполнения программы появился "мусор в памяти".


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Четверг, 18 Октябрь, 2007 16:43 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
С типами здесь все хорошо, они преобразовались по всем правилам неявного преобразования типов.

- Как себя чувствует больной?
- Очень хорошо. Он умер.

Vlad писал(а):
Под "мусором в памяти" обычно понимают неконтролируемое нарушение содержимого объекта, возникающее, в частности, в результате нарушения типизации. В данном примере ничего такого нет.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Четверг, 18 Октябрь, 2007 18:53 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Vlad писал(а):
Под "мусором в памяти" обычно понимают неконтролируемое нарушение содержимого объекта, возникающее, в частности, в результате нарушения типизации. В данном примере ничего такого нет.

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


Ты никогда не видел строк, содержащих непечатаемые символы? Тогда я тебя огорчу, в обероне ты тоже можешь напихать в строку чего угодно (даже без помощи SYSTEM).

Сергей Губанов писал(а):
Я его и назвал мусором. А что, не похож? :D


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Четверг, 18 Октябрь, 2007 19:00 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Евгений Темиргалеев писал(а):
Сергей Губанов писал(а):
В результате во время выполнения программы появился "мусор в памяти".
Мусор? Однако, возможно, enum трактовался как int, у std::string есть конструктор от int-а, и тогда созданный string присвоился, а потом удалился, т. е. никакого мусора, т. к. компилятор должен был уничтожить этот временный string.


Конструктора от int'а у std::string нет (и это правильно). А вот operator = для символа есть. И вот это дизайнерское решение достаточно спорно, учитывая то, что к символу может быть неявно приведено много чего (в том числе и enum).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Четверг, 18 Октябрь, 2007 23:26 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 149
Ещё один пример "прикола" от Си: недавно писал программу, в которой нужно проверять, разный ли знак у двух значений переменных. Для скорости сделал функцию "сигнум", которая возвращала 000, 007, 070 (восьмеричные числа) в ответ на 0 + и -
Долго пытался понять, почему строка
if (a | b == 77) { }
не работает.

Оказывается, надо вот так:
if ((a | b) == 77) { }
(| - это побитовое "ИЛИ").


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Пятница, 19 Октябрь, 2007 08:16 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4593
Откуда: Россия, Орёл
Vlad писал(а):
Конструктора от int'а у std::string нет (и это правильно). А вот operator = для символа есть. И вот это дизайнерское решение достаточно спорно, учитывая то, что к символу может быть неявно приведено много чего (в том числе и enum).

Вот вот. И этот спор такого вида далеко не единственный. Потому что одни хотят более строго языка, чтобы не колупаться в поисках ошибок во время выполнения (в основном из-за опечаток, которые мог бы поймать компилятор буди чуть другое дизайнерское решение в библиотеке или языке), а другие говорят что мы типа крутые программисты, глупых ошибок не допускаем и пусть все так и останется, да не нарушится наша свобода. А в итоге народ клепает подобные вещи http://www.oopweb.com/CPP/Documents/CPPRules/, призывая писать добровольно соблюдая и контролируя самостоятельно набор правил, ограничивающих даже стандарт (видел и такую разработку, ссылку щас не помню) - и суля за это большую читабельность программ и меньшую вероятность ошибок.

А нафиг мне тогда Си++? Без шаблонов как-нибудь проживу, без STL тоже. А вот наживать геморрой в поисках ошибок из-за опечаток или напрягать мозг, следуя каким-то правилам - лучше я на Обероне напишу, который такие ограничения явно вводит и сам проверяет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Вторник, 23 Октябрь, 2007 17:03 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 18:08
Сообщения: 76
Borland Pascal. "Код" мне по наследству достался. Править нельзя - "работает же"
Код:
 CASE  komanda.kodp OF
1: BEGIN

   CASE struct.regim_rab OF

  0: BEGIN
     ....
     IF ... THEN GOTO 2
     ...
1:
     Proc1;
     ...
     IF ... THEN GOTO 1
     ...
   2:
       
     END;

 1: BEGIN
      ...
      IF ... THEN GOTO1;
     ...
    END;
 2: BEGIN
     ...
     IF ... THEN GOTO2;
     IF ... THEN GOTO1;
    END;
    END;
  END
100: BEGIN
....
END;
END;

Процедура, которая содержит этот кусок "кода" - длиной в 300 строк.
И конечно в начале процедуре есть:
Код:
label 1,2;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Вторник, 06 Ноябрь, 2007 20:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9281
Откуда: Россия, Орёл
Фраза из обсуждений сишниками того, хороши шаблоны или плохи. Отвлекаясь от сути вопроса, фраза сама по себе убойная:
Цитата:
Кроме того, код становится более требователен к качеству реализации стандарта компилятором


О как! Ваш код слишком многого хочет от компилятора :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Среда, 07 Ноябрь, 2007 10:50 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Илья Ермаков писал(а):
Фраза из обсуждений сишниками того, хороши шаблоны или плохи. Отвлекаясь от сути вопроса, фраза сама по себе убойная:
Цитата:
Кроме того, код становится более требователен к качеству реализации стандарта компилятором


О как! Ваш код слишком многого хочет от компилятора :-)

Вон у меня на работе программеры наваяли шаблонов как Александреску учил, а при переходе на новую версию компилятора у них не скомпилировалось. Пришлось вернуться на старую. Так на старом и сидят...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередной "прикол" от Си...
СообщениеДобавлено: Среда, 07 Ноябрь, 2007 11:25 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4593
Откуда: Россия, Орёл
Сергей Губанов писал(а):
Вон у меня на работе программеры наваяли шаблонов как Александреску учил, а при переходе на новую версию компилятора у них не скомпилировалось. Пришлось вернуться на старую. Так на старом и сидят...
Макросами их, макросами!!! :lol:
Шоже они так? Не видели никогда файлика аля config.h? И в STLPort есть и в gcc вроде, и по-моему у всех. Надо всего-то лишь параметризировать :lol: шаблонную реализацию макросами, чтобы хавал любой компилятор любой версии.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB