Здравствуйте, <Аноним>, Вы писали:
А>Еще вижу ошибку, незнаю к какому типу отнести эту ошибку, то ли к ДНК (без обид), то ли к ILE (сам тока что придумал Indus Like Error).
А индус тут, кстати, ошибку не найдёт ни с отладчиком, ни без отладчика. Просто потому что он русского языка не понимает .
Здравствуйте, ZevS, Вы писали:
ZS>В точку. Именно поэтому использование операторов -- ++ есть зло. В любом примере. Вообще, ввод их в язык считаю ходом довольно неудачным.
"Вы не любите кошек? Это потому, что вы не умеете их готовить!" (С) не помню чей
Может не стоит так категорически объявлять злом то, с чем надо уметь обращаться?
И перестать обвинять язык в кривости написанного кода.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, ekamaloff, Вы писали:
A>>Насколькоя я знаю, в изначальном C (или B) именно так эти операторы и записывались. Так что, все правильно Компилятор у тебя просто слишком новый
E> А как записывалось присвоение отрицательного значения?
Полагаю, что с пробелом. Вот отрывок из доки к flex:
Функция yyless() в различных обстоятельствах может быть использована для повторной обработки текста. Рассмотрим проблему определения неоднозначного выражения =-a в старом варианте СИ. Допустим, что это требуется представить как =- a для последующей печати. Можно применить следующее правило:
=-[a-zA-Z] {
printf("Operator(=-)ambiguous\n");
yyless(yyleng-1);
... action for =- ...
}
Будет печататься сообщение, после каждого оператора буква будет возвращаться во входной поток, а оператор будет трактоваться как =-.
Наоборот, может потребоваться трактовать это как = -a; чтобы добиться этого, уберите знак минус и букву для ввода. Интерпретация будет выполнена следующими строками:
=-[a-zA-Z {
printf("Operator(=-)ambiguous\n");
yyless(yyleng-2);
... action for = ...
}
А>Кто видит здесь ошибку без отладчика, поднимите руку.
Синтаксической ошибки не вижу. Ошибка семантическая. Имелось ввиду:
x -= 5;
Еще вижу ошибку, незнаю к какому типу отнести эту ошибку, то ли к ДНК (без обид), то ли к ILE (сам тока что придумал Indus Like Error). Кто же такие комменты то пишет ?
Может вы еще пишете так:
int x; // описываем переменную типа int
x = 5; // присваиваем x значение 5
...
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, ZevS, Вы писали:
ZS>>Вам нравятся эти операторы? И же выведет такой код? И почему? ZS>>
ZS>> int i = 2;
ZS>> i += i--;
ZS>> printf("%d", i);
ZS>>
E>Тут кажись неопределенное поведение — двойная модификация переменной между точками следования. А вообще за такой код руки надо отрывать а не приводить в качестве примера.
В точку. Именно поэтому использование операторов -- ++ есть зло. В любом примере. Вообще, ввод их в язык считаю ходом довольно неудачным.
...
_>Да, куча языков, которые называются "васик", это не компиляторы/интерпретаторы. Разницу понимаешь?
Говоря о языках — разницы ни какой. Кстати VB6 — такой же компилятор, как и C#.
_>Попробуй-ка один исходный файл выполнить как VBScript, VBA и QBasic.
Если там написано:
i = i + 2
— результатом всегда будет увеличение i на 2.
_>А о чём? С учётом того, что С++ никогда не рекомендовался для юных программистов.
А кому он рекомендован? Что вообще означает — рекомендован? Мне надо сделать качественный продукт в кротчайшее время с минимальными затратами. Извините, но ваша фраза попахивает снобизмом.
>> Провокационный вопрос: А к goto вы как относитесь? _>Когда сам пишу, стараюсь обходить его использование. И это всегда удаётся без каких либо проблем. Когда читаю чужой код _>- пофиг — есть или нет.
Здравствуйте, ekamaloff, Вы писали:
ZS>>Вам нравятся эти операторы? И же выведет такой код? И почему? ZS>>
ZS>> int i = 2;
ZS>> i += i--;
ZS>> printf("%d", i);
ZS>>
E>Тут кажись неопределенное поведение — двойная модификация переменной между точками следования. А вообще за такой код руки надо отрывать а не приводить в качестве примера.
Почему неопределённое? Есть чётко прописанный приоритет операторов и порядок их выполнения. Здесь порядок — справа налево: сначала вычисление i, потом уменьшение i на единицу, потом прибавление к новому значению этой переменной её значения старого, перед декрементом. Итого, в результате, получится 3.
А код, да. Не для практики, а из серии задач для олимпиад по информатике.
Vi2>Здравствуйте, fmiracle, Вы писали:
F>>Да еще и неправильный коммент?
Vi2>Коммент-то как раз правильнй, это код не правильный.
Ну здрасте!
В приведенном фрагменте есть две части — присвоение Х значения -5 и комметарий, что это не присвоение, а уменьшение. Соответственно, любой и них может быть неправильным!
Признаю — в данном тексте код имеет больше шансов оказаться неправильным, но абсолютно точно это ниоткуда не следует
S>>На самом деле не известно что за объект (какого размера) iterator и делать лишнюю копию незачем(что произошло бы если использовали it=it+1 или it++)...
ZS>А чем это лучше чем
ZS>
ZS> it.Increment();
ZS>
Да это выход, но если iterator вдруг станет int, то придется перелапачивать вес код...
Здравствуйте, AlexWlad, Вы писали:
AW>Здравствуйте, Аноним, Вы писали:
А>>
А>> x =- 5; // уменьшаем x на 5
А>>
А>>Кто видит здесь ошибку без отладчика, поднимите руку.
AW>Ща запинаете, НО... на Паскале такая хрень даже компиляцию не пройдет!!!
Причем тут это? В паскале = — оператор сравнения, а здесь имеется ввиду оператор присваивания... Так что надо было бы писать x:=- 5 — а это вполне пройдет...
Re[2]: Детские ошибки
От:
Аноним
Дата:
01.06.06 04:15
Оценка:
Здравствуйте, Skleroz, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
S>Speccy. 10 лет назад. Два дня не мог найти ошибку. Это я так A на 0 проверял. S>
Здравствуйте, ZevS, Вы писали:
ZS>Вам нравятся эти операторы? И же выведет такой код? И почему? ZS>
ZS> int i = 2;
ZS> i += i--;
ZS> printf("%d", i);
ZS>
Тут кажись неопределенное поведение — двойная модификация переменной между точками следования. А вообще за такой код руки надо отрывать а не приводить в качестве примера.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, ZevS, Вы писали:
ZS>>В точку. Именно поэтому использование операторов -- ++ есть зло. В любом примере. Вообще, ввод их в язык считаю ходом довольно неудачным. CC>"Вы не любите кошек? Это потому, что вы не умеете их готовить!" (С) не помню чей
CC>Может не стоит так категорически объявлять злом то, с чем надо уметь обращаться? CC>И перестать обвинять язык в кривости написанного кода.
1. Результат выполнения программы должен быть предсказуем и не зависить он компилятора. Это мое стойкое убеждение.
2. Языки программирования создают для людей, а не для компьютеров. Следоватьельно код должен быть легко читаем, и это — прерогатива языка. Очень тяжело разгребать чей то кривой код, особенно если он (кривой писатьель) поощряется синтаксисом языка. А как показывает практика, юные программисты очень любят писать код с использованием максимума языковых фенечек.
3. С++ — отличный язык отлично себя зарекомендовавший, но не надо его возводить в абсолют.
ZevS wrote:
> 1. Результат выполнения программы должен быть предсказуем и не зависить > он компилятора. Это мое стойкое убеждение.
Если у языка есть хотя бы больше одного компилятора, то это практически невозможно.
А у С++ (а если ещё С посчитать) — десятки.
> 2. Языки программирования создают для людей, а не для компьютеров. > Следоватьельно код должен быть легко читаем, и это — прерогатива языка. > Очень тяжело разгребать чей то кривой код, особенно если он (кривой > писатьель) поощряется синтаксисом языка. А как показывает практика, юные > программисты очень любят писать код с использованием максимума языковых > фенечек.
Провокационный вопрос: какой язык не позволяет писать криво?
> 3. С++ — отличный язык отлично себя зарекомендовавший, но не надо его > возводить в абсолют.
Вот и не надо возводить в абсолют вред ++/--.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, kan_izh, Вы писали:
_>ZevS wrote:
>> 1. Результат выполнения программы должен быть предсказуем и не зависить >> он компилятора. Это мое стойкое убеждение. _>Если у языка есть хотя бы больше одного компилятора, то это практически невозможно. _>А у С++ (а если ещё С посчитать) — десятки.
Да что вы говорите. Есть куча реализаций Васика и во всех реализациях сложение и вычитание целых цисел работает одинаково.
>> 2. Языки программирования создают для людей, а не для компьютеров. >> Следоватьельно код должен быть легко читаем, и это — прерогатива языка. >> Очень тяжело разгребать чей то кривой код, особенно если он (кривой >> писатьель) поощряется синтаксисом языка. А как показывает практика, юные >> программисты очень любят писать код с использованием максимума языковых >> фенечек. _>Провокационный вопрос: какой язык не позволяет писать криво?
Я не о том.
>> 3. С++ — отличный язык отлично себя зарекомендовавший, но не надо его >> возводить в абсолют. _>Вот и не надо возводить в абсолют вред ++/--.
Провокационный вопрос: А к goto вы как относитесь?
ZevS wrote:
>> > 1. Результат выполнения программы должен быть предсказуем и не зависить >> > он компилятора. Это мое стойкое убеждение. > _>Если у языка есть хотя бы больше одного компилятора, то это > практически невозможно. > _>А у С++ (а если ещё С посчитать) — десятки. > Да что вы говорите. Есть куча реализаций Васика и во всех реализациях > сложение и вычитание целых цисел работает одинаково.
Да, куча языков, которые называются "васик", это не компиляторы/интерпретаторы. Разницу понимаешь?
Попробуй-ка один исходный файл выполнить как VBScript, VBA и QBasic.
>> > 2. Языки программирования создают для людей, а не для компьютеров. >> > Следоватьельно код должен быть легко читаем, и это — прерогатива языка. >> > Очень тяжело разгребать чей то кривой код, особенно если он (кривой >> > писатьель) поощряется синтаксисом языка. А как показывает практика, юные >> > программисты очень любят писать код с использованием максимума языковых >> > фенечек. > _>Провокационный вопрос: какой язык не позволяет писать криво? > Я не о том.
А о чём? С учётом того, что С++ никогда не рекомендовался для юных программистов.
>> > 3. С++ — отличный язык отлично себя зарекомендовавший, но не надо его >> > возводить в абсолют. > _>Вот и не надо возводить в абсолют вред ++/--. > Провокационный вопрос: А к goto вы как относитесь?
Когда сам пишу, стараюсь обходить его использование. И это всегда удаётся без каких либо проблем. Когда читаю чужой код
— пофиг — есть или нет.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
ZevS wrote:
> _>Да, куча языков, которые называются "васик", это не > компиляторы/интерпретаторы. Разницу понимаешь? > Говоря о *языках* — разницы ни какой.
Если ты будешь всегда работать под одним и тем же компилером C++, то ты не скоро столкнёшься с проблемами UB.
> Кстати VB6 — такой же компилятор, как и C#.
Это не важно. Важно то, что для VB6 есть всего один продукт (и фактически только одна версия), который с ним работает.
> _>Попробуй-ка один исходный файл выполнить как VBScript, VBA и QBasic. > Если там написано: > i = i + 2 > — результатом всегда будет увеличение i на 2.
И что? В C++, не поверишь, тоже.
> _>А о чём? С учётом того, что С++ никогда не рекомендовался для юных > программистов. > А кому он рекомендован? Что вообще означает — рекомендован? Мне надо > сделать качественный продукт в кротчайшее время с минимальными > затратами. Извините, но ваша фраза попахивает снобизмом.
"Качественный" в данном случае расплывчатое понятие. Или ты сразу можешь сказать, какой язык
подойдёт при таких требованиях?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
...
>> _>Попробуй-ка один исходный файл выполнить как VBScript, VBA и QBasic. >> Если там написано: >> i = i + 2 >> — результатом всегда будет увеличение i на 2. _>И что? В C++, не поверишь, тоже.
На васике нет неоднозначностей, на C++ — есть. Я хотел сказать это. На васике выражение a+++b трактуется всегда однозначно.
>> _>А о чём? С учётом того, что С++ никогда не рекомендовался для юных >> программистов. >> А кому он рекомендован? Что вообще означает — рекомендован? Мне надо >> сделать качественный продукт в кротчайшее время с минимальными >> затратами. Извините, но ваша фраза попахивает снобизмом. _>"Качественный" в данном случае расплывчатое понятие. Или ты сразу можешь сказать, какой язык _>подойдёт при таких требованиях?
Мое исходное сообщение было про синтаксис языка, а не язык/библиотеки и что на чем надо...
Согласитесь что неоднозначный синтаксис — плохо. Примените двоемыслие, когда С++ — хорошо, а его неоднозначный синтаксис — плохо.
ZevS wrote:
> На васике нет неоднозначностей, на C++ — есть. Я хотел сказать это. На > васике выражение a+++b трактуется всегда однозначно.
Ах, если бы только это сказывалось на качестве языка....
> Мое исходное сообщение было про синтаксис языка, а не язык/библиотеки и > что на чем надо... > Согласитесь что неоднозначный синтаксис — плохо.
Чем больше выразительность языка, тем сложнее синтаксис. Вот у русского языка такой сложный синтаксис, это плохо? Да,
для безграмотных, но для грамотных людей — возможность писать выразительно.
> Примените двоемыслие,
А вы не пытайтесь всё делить на хорошо и плохо, это религиозные понятия.
> когда С++ — хорошо, а его неоднозначный синтаксис — плохо.
Ладно, тогда можно раскрыть понятие "рекомендован". Кто не обращает внимание на синтаксис языка, тому рекомендован.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
ZevS wrote:
> Кстати, почитайте статью Вирта в последнем RSDN-е. Интересная статейка.
Странная у него там критика. Теоретик он. Не принимает простое правило "если это глупо, но работает, значит это не глупо".
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Xander Zerge, Вы писали:
XZ>Почему неопределённое? Есть чётко прописанный приоритет операторов и порядок их выполнения. Здесь порядок — справа налево: сначала вычисление i, потом уменьшение i на единицу, потом прибавление к новому значению этой переменной её значения старого, перед декрементом. Итого, в результате, получится 3.
Я вообще-то не совсем уверен в своей правоте , но советую посмотреть здесь:
F>Причем тут русский? F>Нахрена коммент к коду, который сам себя документирует?
F>Да еще и неправильный коммент?
В том-то и дело! На русском — значит, индус не поймёт. Как сам коммент, так и (естественно) то, что он — неправильный. Поэтому он не поймёт ничего, кроме этого самодокументированного кода, а в нём ошибки-то как раз нет!
Здравствуйте, Sergei, Вы писали:
S>Здравствуйте, ZevS, Вы писали:
S>++ += и т.п. особенно префиксные иногда полезны (например, для оптимизции), если они работают с пользовательскими объектами (например, string);
Пример такой оптимизации в студию!
PS: я бы 10 (десять) раз подумал прежде чем перегружать какие бы то ни было операторы в пользовательском типе...
Здравствуйте, kan_izh, Вы писали:
_>ZevS wrote:
>> Кстати, почитайте статью Вирта в последнем RSDN-е. Интересная статейка. _>Странная у него там критика. Теоретик он. Не принимает простое правило "если это глупо, но работает, значит это не глупо".
В ходе этой дискуссии почему-то получается так что я говорю об операторах ++ -- , а мне отвечают в том духе что С++ лучше всех. С++ безусловно круче чем VB, Java, весь .NET, Prolog, Lisp и др. вместе взятые. Закрыли тему — глупая она.
По существу, есть у вас что-либо в защиту именно этих операторов?
зыЖ Я уверен более чем на 90% что если вы загляните в свой собственный код, то не увидите эти операторы где-либо, кроме как в заголовке цикла for.
Здравствуйте, ansi, Вы писали:
A>Насколькоя я знаю, в изначальном C (или B) именно так эти операторы и записывались. Так что, все правильно Компилятор у тебя просто слишком новый
А как записывалось присвоение отрицательного значения?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, ZevS, Вы писали:
ZS>Здравствуйте, Sergei, Вы писали:
S>>Здравствуйте, ZevS, Вы писали:
S>>++ += и т.п. особенно префиксные иногда полезны (например, для оптимизции), если они работают с пользовательскими объектами (например, string);
ZS>Пример такой оптимизации в студию!
На самом деле не известно что за объект (какого размера) iterator и делать лишнюю копию незачем(что произошло бы если использовали it=it+1 или it++)...
Re: Детские ошибки
От:
Аноним
Дата:
02.06.06 11:18
Оценка:
Здравствуйте, Аноним, Вы писали:
А>
А> x =- 5; // уменьшаем x на 5
А>
А>Кто видит здесь ошибку без отладчика, поднимите руку.
S>На самом деле не известно что за объект (какого размера) iterator и делать лишнюю копию незачем(что произошло бы если использовали it=it+1 или it++)...
Vi2>>Коммент-то как раз правильнй, это код не правильный.
F>Ну здрасте! F>В приведенном фрагменте есть две части — присвоение Х значения -5 и комметарий, что это не присвоение, а уменьшение. Соответственно, любой и них может быть неправильным!
Умникус? Ты сам это разобрал или сначала прочитал все ответы?
F>Признаю — в данном тексте код имеет больше шансов оказаться неправильным, но абсолютно точно это ниоткуда не следует
Это следует из названия темы, в которой расположено письмо.
Невозможно чтобы у всех было всё, так как всех много, а всего мало...
ZevS wrote:
>> > Кстати, почитайте статью Вирта в последнем RSDN-е. Интересная статейка. > _>Странная у него там критика. Теоретик он. Не принимает простое правило > "если это глупо, но работает, значит это не глупо".
> В ходе этой /дискуссии/ почему-то получается так что я говорю об > операторах ++ -- , а мне отвечают в том духе что С++ лучше всех. С++ > безусловно круче чем VB, Java, весь .NET, Prolog, Lisp и др. вместе > взятые. Закрыли тему — глупая она.
Да не круче. Просто когда ко всякой херне прикапываются не по делу — смешно становится.
> *По существу, есть у вас что-либо в защиту именно этих операторов?*
Не нравится — не используй. Напиши:
#define pre_increment(i) (++i)
#define post_increment(i) (i++)
// или даже такtemplate<T> T& pre_increment(T& i){return ++i;}
template<T> T post_increment(T& i){return i++;}
// и не забудь добавить:#define BEGIN {
#define END }
и никогда не пиши ++ более.
> зыЖ Я уверен более чем на 90% что если вы загляните в свой собственный > код, то не увидите эти операторы где-либо, кроме как в заголовке цикла for.
А что плохого в том, что это очень удобно применять в for?
Вот ещё, например:
Iter parts = make_split_iterator(str, first_finder("|", is_iequal()));
const string name(copy_range<string>(*parts++));
const string value(copy_range<string>(*parts++));
const string params(copy_range<string>(*parts++));
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, asdfghjkl, Вы писали:
A>Вот за это я и не люблю паскакаль, что приходится писать A>
A>yyval[yypv[p3+p4] + yypv[p1+p2]] = yyval[yypv[p3+p4] + yypv[p1+p2]] + 2;
A>
Это только любители cиcи++ думают, что на паскакале приходится писать так... они всегда такие путаники...
На самом деле, на паскале это пишется примерно так:
Здравствуйте, ZevS, Вы писали:
ZS>Здравствуйте, CreatorCray, Вы писали:
CC>>Здравствуйте, ZevS, Вы писали:
ZS>>>В точку. Именно поэтому использование операторов -- ++ есть зло. В любом примере. Вообще, ввод их в язык считаю ходом довольно неудачным. CC>>"Вы не любите кошек? Это потому, что вы не умеете их готовить!" (С) не помню чей
CC>>Может не стоит так категорически объявлять злом то, с чем надо уметь обращаться? CC>>И перестать обвинять язык в кривости написанного кода.
ZS>1. Результат выполнения программы должен быть предсказуем и не зависить он компилятора. Это мое стойкое убеждение. ZS>2. Языки программирования создают для людей, а не для компьютеров. Следоватьельно код должен быть легко читаем, и это — прерогатива языка. Очень тяжело разгребать чей то кривой код, особенно если он (кривой писатьель) поощряется синтаксисом языка. А как показывает практика, юные программисты очень любят писать код с использованием максимума языковых фенечек. ZS>3. С++ — отличный язык отлично себя зарекомендовавший, но не надо его возводить в абсолют.
Совершенно правильно.
Я бы ещё добавил, что
4. От современного компилятора требуется не только сделать машинный код из исходного текста, но и максимально помочь программисту сделать минимум ошибок в этом коде, быстро найти имеющиеся ошибки и помочь их исправить. Данные задачи гораздо легче реализуются при создании компилятора с языка, обладающего такими вещами, как строгий контроль типов данных и легкочитаемый, однозначный синтаксис (ведь если человек легко интерпретирует синтаксис — то это легче и запрограммировать). Как побочный эффект, такой код гораздо быстрее компилируется. вы никогда не задумывались, почему компилятор Delphi работает в разы быстрее компиляторов C/C++ и его сообщения об ошибках гораздо более информативны? А почему в новых языках программирования постоянно усиливается контроль типов (в С его не было, в C++ он появился, в C# он стал таким же, как с самого начала был в Паскале)? А зачем появляются такие термины, как "безопасный код", "управляемый код"? Всё-таки, люди (программисты) хотят, чтобы код действительно был как можно более безопасен и управляем, и чтобы среда разработки помогала им делать это, и Microsoft не забывает использовать это в своём маркетинге! Другое дело, что вокруг синтаксиса С и C++ такую функциональность было довольно сложно навернуть, и пришлось всё же создать новый язык (C#)...
Выходит, Вирт хоть и был "теоретик", но он ещё тогда создал ВЕЩЬ, и он уже тогда знал, что людей со временем не удовлетворит утверждение "работающая глупость — это уже не глупость". Ибо глупость может работать сегодня при одних данных и отказаться работать завтра при других. А нужно — чтобы работало ВСЕГДА. И он предложил действенный способ минимизировать количество детских ошибок.
Physician wrote:
> для более универсального случая вполне можно написать: > > ff := yyval[yypv[p3+p4] + yypv[p1+p2]]; > ff := ff+2;
А ff какого типа? Оно изменит значение в массиве yyval?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, kan_izh, Вы писали:
_>Physician wrote:
>> для более универсального случая вполне можно написать: >> >> ff := yyval[yypv[p3+p4] + yypv[p1+p2]]; >> ff := ff+2; _>А ff какого типа? Оно изменит значение в массиве yyval?
Сорри, опечатался. Имел в виду вот это:
i := yypv[p3+p4] + yypv[p1+p2];
yyval[i] := yyval[i]+1;
A>Умникус? Ты сам это разобрал или сначала прочитал все ответы?
Нихренасе. Такой наезд и безо всякого повода... Или у Вас есть основания поладать, что я не умею читать код?
Не понмаю, почему предположеие, что комментарий тоже может быть неправильным выывает такую реакцию. Это я, конечно, в шутку писал, но блин — это такая шутка, которая _регулярно_ повторяется в жизни.
Или Вы никогда не видели неправильных комментариев в коде? А Вы писали большие проекты? А возвращались к ним через год где-то? А чужой код поддерживали? Если да и не видели неверных комментариев — ну вам очень повезло.
Я встречаю время от времени. Кто-то написал код с комментарием, потом код обновил, а коммент — забыл. Кто-то комментил чужой код и неправильно его понял. Кто-то кометировал свой код _после_ написания и перепутал функции — не туда вставил комментарий. Брр.
Не сама частая ошибка, но зато очень хорошо запоминается своей "приятностью"...
Здравствуйте, AYuBurtsev, Вы писали:
AYB>if( expr == !! true ) AYB> i += k+++++m;
AYB>А на олимпиаде могут переопределить оператор "+=" и предложить поискать ошибку...
Простите, это на каких олимпиадах такими, кхм, извращениями занимаются?
Кстати, += для встроенного типа переопределить не удасться.
Здравствуйте, ZevS, Вы писали:
ZS>Здравствуйте, ekamaloff, Вы писали:
E>>Здравствуйте, ZevS, Вы писали:
ZS>>>Вам нравятся эти операторы? И же выведет такой код? И почему? ZS>>>
ZS>>> int i = 2;
ZS>>> i += i--;
ZS>>> printf("%d", i);
ZS>>>
E>>Тут кажись неопределенное поведение — двойная модификация переменной между точками следования. А вообще за такой код руки надо отрывать а не приводить в качестве примера.
ZS>В точку. Именно поэтому использование операторов -- ++ есть зло. В любом примере. Вообще, ввод их в язык считаю ходом довольно неудачным.
Весьма с вами не согласен!!!!!!! Использование модификаций — очень облегчает понимание, а тем более и написание кода!!!(хотя кто как привык...) НО главно просто не переборщить!!!!!!!!
Здравствуйте, AYuBurtsev, Вы писали:
AYB>Здравствуйте, Xander Zerge, Вы писали:
XZ>>А код, да. Не для практики, а из серии задач для олимпиад по информатике.
AYB>Да, довольно мило... Вот тоже вариантик:
AYB>if( expr == !! true ) AYB> i += k+++++m;
AYB>А на олимпиаде могут переопределить оператор "+=" и предложить поискать ошибку... AYB>Не все на дебаге в хидер смотрят...
AYB>С наилучшими пожеланиями.
Увлекся вашим интереснейшим примерчиком и решил его немного развить (так сказать для полной красоты... )
вот что получилось:
int i=1;
int k=5;
int m = 10;
i +=++k+++++m++;
Но надо сказать, что данная процедура работает не корректно (хотя никаких ошибоккомпилятор не выводит (только предупреждения)).
Некорректность заключается в том, что даже в отладчики при остановки программы она просто не прекращает свое выполнение и проходит все выставленные точки.