И что тут неверного? Сказали что переменная может изменятся, и компилятор не должен проводить лишних телодвижений при оптимизации?
Примерно так. В конкретно этом случае - если ему сказали что переменная volatile и ее надо сто раз увелисчить на 1, то он обязан именно 100 раз ее увеличить а не один раз прибавить 100. Хотя с точки зрения математики оба действия эквивалентны.Цитата
Это значит что ваша программа была написана с ошибками.
Вы не понимаете сути, поставленного вопроса, или не хотите понимать. Как программа может быть написано неправильно, если я заранее сказал, что задача написана ПРАВИЛЬНО!
Давайте скажем, что программа – работает (можно добавить ещё - по алгоритму). Т.е независимо от того, как программа выглядит на С, после компиляции программа выдаёт все заложенные в неё характеристики, это и время и размер и алгоритмы.
Это совсем не значит, что она не содержит ошибок.Вопрос состоит в том, каких фокусов можно ожидать от компилятора при оптимизации и как с ними бороться.
В правильно написанной программе - никаких.Одного при оптимизациях O-0…O-2 ничего не выкидывается, а при O-3 time уже всё?
Код
int a;
int b;
a = 1;
b = 2;
a = a+b;
b = b+a;
if (a > 5)
{
кусок кода
}
При O-0 компилятор сгенерирует вам нужные команды для каждого из выражений. Чтобы вы могли пройти по шагам по каждому из этих выражений в дебаггере. А при более высоком он сам сосчитает, что в if() a = 5 и это условие не будет истинным, значит {кусок кода} никогда не будет выполнен и его можно смело выбросить. Теперь понятно?int b;
a = 1;
b = 2;
a = a+b;
b = b+a;
if (a > 5)
{
кусок кода
}
Там правильно, а здесь уже неправильно? Ошибки бывают двух видов. Синтаксические, и алгоритмические. Первые решаются на этапе компиляции, вторые на этапе отладки. Пройти этот путь и всё. Чего вам не хватает?
Ваша ошибка относится к алгоритмической. Только вы не учитываете, что уровень оптимизации является так же входным данным для вашего алгоритма как и содержимое переменных. И проверка показывает, что на некоторых наборах входных данных (O-3) ваш алгоритм не работает.Цитата
И такой отказ может произойти, даже если вы добавите одну лишнюю инструкцию в программу
Извиняюсь за дерзость, но это, мягко говоря, неправдо!
Я НЕ ЗАЩИЩАЮ МОИ ТВОРЕНИЯ!!! Я ХОЧУ СКАЗАТЬ ЧТО НЕ СТАВТИ ВАШИ ТВОРЕНИЯ ВЫШЕ ВСЕХ ОСТАЛЬНЫХ ТОЛЬКО ПОТОМУ ЧТО ОНИ ВАШИ! Выкладывайте ваши решения и не поливайте помоями другие, допускается указание на более лучшее решения по вашему мнению. А что лучше решит каждый для себя САМ!!!
Замечательно. Вам указали лучшее решение, вам показали где у вас ошибка и даже несколько раз разжевали почему это именно ошибка. В ответ получаем Цитата
Я абсолютно уверен в своих программах
Ну продолжайте верить.Мне лично больше нравится, и следовательно быстрее работаю, с bin. А ваши (x<<1) ненравятся. Кто же кроме меня покажет и другой стиль если я один такой, а вы все "правильно" пишете в одном стиле.
В этом примере упор был на то, что вместо безликих нулей и единиц используются символьные имена битов. Что сильно упрощает и чтение и модификацию программы.Если data sheet вас отвлекает, ну тогда я незнаю...
прочитайте еще раз тот абзац внимательно.P.S. и постарайтесь просматривать свои сообщения на предмет орфографических ошибок - глаза режет.