D>>В данном случае компилятор выдает варнинг потому что он программист мог ошибиться, написав тавтологию, но в данном конкретном случае это не ошибка, и код выглядит лучше с обоими сравнениями. U>как я понимаю, ворнинг дан на сравнение >=0, которое выполнено всегда для беззнаковых типов U>считаю его бестолковым и я бы отрубил его в свойствах проекта\мейкфайлах, но не в исходном коде
Варнинг может быть полезен. К взяли код предназначенный для работы с signed переменной, вкопипастили его в код с unsigned переменной. Код стал глючить. Почему — непонятно. А варнинг сразу подскажет.
Отключение варнингов — последнее дело. Если варнинг мона пофиксить в исходном коде — так и надо сделать.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, Alca, Вы писали:
A>>
A>>warning: comparison is always true due to limited range of data type
A>>Почему ворнинг?
BFE>Два варианта: BFE>1) USHRT_MAX слишком мал BFE>2) компилятор "слишком" умён и видит, что usYear никогда не меняется
A>>Как его убрать? BFE>Может const'ы добавить: BFE>
D>либо подумать а так ли нужно убирать все дурацкие ворнинги (может его прагмой убрать?) D>Мне первоначальный вариант кода нравится больше
за что минусы то?
это работа оптимизатора -- прослеживать зависимости и устранять ненужные вычисления.
Программист вовсе не должен устранять их сам, наоборот, он должен стараться писать потупее.
В данном случае компилятор выдает варнинг потому что он программист мог ошибиться, написав тавтологию, но в данном конкретном случае это не ошибка, и код выглядит лучше с обоими сравнениями.
Здравствуйте, dilmah, Вы писали:
D>В данном случае компилятор выдает варнинг потому что он программист мог ошибиться, написав тавтологию, но в данном конкретном случае это не ошибка, и код выглядит лучше с обоими сравнениями.
как я понимаю, ворнинг дан на сравнение >=0, которое выполнено всегда для беззнаковых типов
считаю его бестолковым и я бы отрубил его в свойствах проекта\мейкфайлах, но не в исходном коде
Здравствуйте, Dukhat, Вы писали:
R>>Можно написать так: R>>
R>>bool bRes = unsigned(usYear) <= 9999;
R>>
R>>тем самым придав коду некоторый запас прочности на тот случай, если тип usYear вдруг изменится на знаковый. Да и нагляднее.
D>unsigned это unsigned int, а не unsigned short.
Спасибо, я в курсе.
D>Зачем от двухбайтового приводить к четырех, но при этом все равно беззнаковому?
Почему бы нет? Результат при этом будет ровно таким же, как если написать:
bool bRes = (0 <= usYear <= 9999);
О потере производительности в данном случае беспокоиться вообще не стоит — любой, даже самый убитый компилятор соптимизирует это без проблем. Так что приведение в данном случае носит чисто косметический характер и не имеет никаких эффектов, кроме улучшения наглядности и устранения лишнего ворнинга.
Здравствуйте, VladFein, Вы писали:
R>>тем самым придав коду некоторый запас прочности на тот случай, если тип usYear вдруг изменится на знаковый. Да и нагляднее.
VF>Если тип изменится на знаковый, значит он допускает отрицательные значения.
Здравствуйте, uzhas, Вы писали:
U>считаю его бестолковым и я бы отрубил его в свойствах проекта\мейкфайлах, но не в исходном коде
не я один считаю его бестолковым http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12963
Здравствуйте, rg45, Вы писали:
D>>Зачем от двухбайтового приводить к четырех, но при этом все равно беззнаковому?
R>Почему бы нет? Результат при этом будет ровно таким же, как если написать: R>
R>bool bRes = (0 <= usYear <= 9999);
R>
Ну это вряд ли...
Ваш код — это:
bool bRes = ( (0 <= usYear) <= 9999);
где (0 <= usYear) превращается в 0 или 1, что ВСЕГДА меньше 9999
Здравствуйте, uzhas, Вы писали:
U>Здравствуйте, uzhas, Вы писали:
U>>считаю его бестолковым и я бы отрубил его в свойствах проекта\мейкфайлах, но не в исходном коде U>не я один считаю его бестолковым U>http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12963
Где он там бестолковый? Там лишь спор о том, под какой опцией его показывать
Этот варнинг очень правильный, потому что народ сплошь и рядом пишет return -1; а потом проверяет результат на >=0 (вместо != -1) и удивляется, почему это вдруг его код перестал работать — а это всего лишь потому что тип стал беззнаковым (например, при переезде на другую платформу char стал unsigned)
Здравствуйте, jazzer, Вы писали:
J>Где он там бестолковый? Там лишь спор о том, под какой опцией его показывать
там спор о том, как бы убрать подальше этот ворнинг (и из дефолтов тоже), чтобы в простых ситуациях типа как у ТС, он не мозолил глаза и это подфиксили в след. версиях гцц