Здравствуйте, Vamp, Вы писали:
V>Без дебаггера, простым запуском, видно, что программа делает именно то, что заявлено в описании. V>hostame $ ./a.out V>1, 1, 2, 3, 5, 8, 13, 21 V>hostname $
У Вас тоже проблемы с чтением?
"Попробуйте скомпиллировать данный код в VC++ любой версии и запустить. "
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>Здравствуйте, criosray, Вы писали:
C>Попробуйте скомпиллировать данный код в VC++ любой версии и запустить. C>Сразу скажу, что код корректен.
C>Попробуйте без дебагера угадать в чем проблема. Удачи.
Сейчас скажу грубо, но как говориться троллю троллево:
Я тебе и без дебаггера скажу в чём проблема, проблема в том что ты не знаешь что такое триграфы. Ещё проблема в том что ты нихрена не писал на С++ как заявляешь, либо у тебя настолько ороговение мозга что я даже не знаю последствием какой травмы это может являться. Пиши на C# родной, забей на С++, очевидно что этот язык не для тебя.
People write code, programming languages don't.
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>(подсказка: бесконечный цикл)
Двойка за апелляцию к тому, чего толком не знаешь. Произойдёт UB. Остальные тезисы... Ну, ты понял.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
C>void myFoo(int *arr, int length)
C>{
C> for (int i = 0; i < length; i++) {
C> arr[i] = 0;
C> }
C>}
C>...
C>int *arr = new int[length];
C>...
C>length++;
C>...
C>myFoo(arr, length);
C>
Ты уж дай волю фантазии, пусть твой C++-ник напишет так:
length *= 10;
Целовать — так королеву, обнулять память — так подчистую!
V>>Ну и в последних, писать итеративные циклы в С++, где есть for_each, bind и lambda — каменный век. C>В std есть lambda? С каких пор?
А что, на std свет клином сошёлся?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
CC>>Имплементация С++0х не есть самодеятельность. C>Пока С++0x draft — есть самодеятельность.
Тут ещё нужно топнуть ногой.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, Хвост, Вы писали:
Х>Здравствуйте, criosray, Вы писали:
C>>Здравствуйте, criosray, Вы писали:
C>>Попробуйте скомпиллировать данный код в VC++ любой версии и запустить. C>>Сразу скажу, что код корректен.
C>>Попробуйте без дебагера угадать в чем проблема. Удачи.
Х>Сейчас скажу грубо, но как говориться троллю троллево:
Х>Я тебе и без дебаггера скажу в чём проблема, проблема в том что ты не знаешь что такое триграфы.
Я не знаю что такое триграфы? Я привел в качестве примера одного из многих подводных камней код с триграфом, определенным в одном компилляторе и неопределенном в другом компилляторе (что мы воочию убедились) и на основе этого Вы сделали такое интересный вывод? Давече здесь упоминали женскую логику... похоже Ваш случай.
Х>Ещё проблема в том что ты нихрена не писал на С++ как заявляешь,
Х>либо у тебя настолько ороговение мозга что я даже не знаю последствием какой травмы это может являться.
А это уже неприкрытое оскорбление. Вы не волнуйтесь, с мозгом у меня все в порядке, а вот у Вас явные проблемы с адекватным восприятием других людей. Х>Пиши на C# родной, забей на С++, очевидно что этот язык не для тебя.
И уж тем более не для Вас.
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, Геннадий Васильев, Вы писали:
C>>(подсказка: бесконечный цикл)
ГВ>Двойка за апелляцию к тому, чего толком не знаешь. Произойдёт UB. Остальные тезисы... Ну, ты понял.
Вот именно, что делает подобные ошибки во сто крат хуже, так как результат такой ошибки непредсказуем.
Re[5]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, Sheridan, Вы писали:
c>> У Вас тоже проблемы с чтением? c>> "Попробуйте скомпиллировать данный код в VC++ любой версии и запустить. "
S>Спасибо что открыл мне глаза на микрософтовский компилятор.
А с ним все в порядке. Поспрашивайте вон у Хвоста что такое триграфы.
Re[8]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>Представим другую ситуацию: внешняя переменная — некий аккумулятор, который наполняется в цикле. Предположим, что мы собираем и тестируем нашу программу определенным компилятором, который не сгенерирует код, способный затереть значение во внешнем аккумуляторе по выходу за границы массива (например, соптимизирует аккумулятор так, чтоб он постоянно находился в неком регистре). Все вроде отлично — программа работает... Но вот решаете Вы портировать Вашу программу, например, под другую платформу и для сборки используете уже другой компиллятор, который сгенерирует такой машинный код, что переменная-аккумулятор теперь станет затираться. Как же так, код, который годами работал и тут на тебе — сбоит на ровном месте!
угу, именно поэтому я сразу сказал, что приведенный код — это говнокод.
На такого рода шаблоны со временем глаз уже настраивается. Заводишь массив — размер задаешь РОВНО в одном месте, в остальных — через sizeof или иначе (я обычно константу задаю, потом ее использую). Когда перебор элементов, то в условии ВСЕГДА знак <, и никак не иначе. Ну и так далее. Чисто опыт со временем.
C>А ведь вместо обычного целочисленного аккумулятора по тому адресу на стеке вполне мог быть, скажем, адрес zero-terminated строки и вот мы его затерли и он стал указывать совсем другой участок памяти... И еще очень хорошо будет, если тут же выскочит segment fault, а не что похуже...
Угу, один из способов взлома программ — это переполнение стэка. Принцип действия точно такой же.
И ведь сколько лет известна проблема, а все еще можно применить. Не далее как пару месяцев наза внутрях мозиллы чинил подобный вот код.....
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>Попробуйте скомпиллировать данный код в VC++ любой версии и запустить. C>Сразу скажу, что код корректен.
C>Попробуйте без дебагера угадать в чем проблема. Удачи.
поскольку ругань закончилась, спрошу: и что там не так? Визуалки под рукой нет. Про триграфы только слышал в детстве, так и не осилил их запомнить
Re[9]: Модульные тесты и "безопасные" языки - хорошо.
CC>Так нагляднее:
...
Во первых, лично мне запись в одну строчку нагляднее. Но у на свобода — если тебе так нагляднее, найди себе компилятор, который поддерживает такую запись, и пиши так.
Да здравствует мыло душистое и веревка пушистая.
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, March_rabbit, Вы писали:
C>>Попробуйте скомпиллировать данный код в VC++ любой версии и запустить. C>>Сразу скажу, что код корректен.
C>>Попробуйте без дебагера угадать в чем проблема. Удачи. M_>поскольку ругань закончилась, спрошу: и что там не так? Визуалки под рукой нет. Про триграфы только слышал в детстве, так и не осилил их запомнить
Из-за триграфа first=second не компилируется, поэтому результат 1 1 1 1 1 ... 20, а не 1 1 2 3 5 ... 21
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>Здравствуйте, March_rabbit, Вы писали:
C>>>Попробуйте скомпиллировать данный код в VC++ любой версии и запустить. C>>>Сразу скажу, что код корректен.
C>>>Попробуйте без дебагера угадать в чем проблема. Удачи. M_>>поскольку ругань закончилась, спрошу: и что там не так? Визуалки под рукой нет. Про триграфы только слышал в детстве, так и не осилил их запомнить C>Из-за триграфа first=second не компилируется, поэтому результат 1 1 1 1 1 ... 20, а не 1 1 2 3 5 ... 21
вероятно, триграф выглядел как-то так: <??/> ?
еще когда наткнулся на них, подумал, что это — зло.
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, Хвост, Вы писали:
Х>Здравствуйте, criosray, Вы писали:
Х>Я тебе и без дебаггера скажу в чём проблема, проблема в том что ты не знаешь что такое триграфы. Ещё проблема в том что ты нихрена не писал на С++ как заявляешь, либо у тебя настолько ороговение мозга что я даже не знаю последствием какой травмы это может являться. Пиши на C# родной, забей на С++, очевидно что этот язык не для тебя.
Здравствуйте, midcyber, Вы писали:
Х>>Я тебе и без дебаггера скажу в чём проблема, проблема в том что ты не знаешь что такое триграфы. Ещё проблема в том что ты нихрена не писал на С++ как заявляешь, либо у тебя настолько ороговение мозга что я даже не знаю последствием какой травмы это может являться. Пиши на C# родной, забей на С++, очевидно что этот язык не для тебя.
M>Проблем еще несколько, во-первых, этот этюд
C>Из-за триграфа first=second не компилируется, поэтому результат 1 1 1 1 1 ... 20, а не 1 1 2 3 5 ... 21
Инструментом, который ты пользуешься, надо владеть. Вот и все.
Да здравствует мыло душистое и веревка пушистая.
Re[5]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, Vamp, Вы писали:
C>>Из-за триграфа first=second не компилируется, поэтому результат 1 1 1 1 1 ... 20, а не 1 1 2 3 5 ... 21 V>Инструментом, который ты пользуешься, надо владеть. Вот и все.
Совершенно верно: знать и всегда помнить обо ВСЕХ подводных камнях.
Но в природе человека ошибаться. Поэтому язык, который допускает такое количество проблем, есть очень плохой язык. В то время, как современное программирование вплотную подходит к мультипарадигмам с чрезвычайно высоким уровнем "безопасности" программирования (строгая типизация, декларативность, минимизация побочных эффектов за счет применения функциональных парадигм, минимизация использования объектов с изменяемым состоянием и т.д. и т.д.), С++ по прежнему болеет все теми же детскими болезнями, которыми болел в 70х-80х... Грустно.
Re[5]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
M>>во-вторых, какой нормальный программист напишет в комментариях "так ведь ???" да еще оформлять их слешами в конце?.. C>Вы будете сильно удивлены, когда узнаете ЧТО программисты пишут в комментариях.
Ну, удиви меня.
ИМХО именно этот этюд — надуманный и высосанный из пальца.