Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Warning "Comparing signed and unsigned values", Возможные причины возникновения 
V
    Опции темы
Riply
Дата 22.7.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Здравствуйте !
Допустим, у нас есть такая функция:
Код

__inline NTSTATUS Us_ReallocMem_(const PUNICODE_STRING pUs, const ULONG BytesAlloc)
{
  NTSTATUS RetStatus =  Um_ReAllocateMem(&pUs->Buffer, BytesAlloc);
  if NT_SUCCESS(RetStatus)
    {
      pUs->MaximumLength = BytesAlloc;
      if (pUs->Length > BytesAlloc) pUs->Length = BytesAlloc; // <--- Warning
    };
  return RetStatus;
};

При компиляции под C++Builder получаем следующий Warning:
[C++ Warning] Sh_Unicode.h(122): W8012 Comparing signed and unsigned values

UNICODE_STRING.Length имеет тип USHORT.  
Почему он(Warning) возникает, ведь идет сравнение беззнаковых значений ?
Или ему не нравится несовпадение "размерностей" ?
Если так, то почему "не нравиться" ?
PM MAIL   Вверх
Alexeis
Дата 22.7.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



  Это просто билдер тупит, он такое предупреждение выдает всегда когда диапазоны значений чисел не совпадают. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Riply
Дата 22.7.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Цитата(Alexeis @  22.7.2008,  14:38 Найти цитируемый пост)
Это просто билдер тупит


Спасибо.
Правда в 99-и случаях из ста, когда обвиняли в "глючности" среду программирования или Windows,
в результате выяснялось, что глюкнутый то программист, а не они.
Но, за неимением лучшего, поверю на слово и буду считать, что "тупит билдер", а вовсе не я  smile 

PM MAIL   Вверх
Alexeis
Дата 22.7.2008, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



Riply, я скажу более того он тоже самое выдает при прямом указании unsigned int и unsigned short, а при указании unsigned short и unsigned char просто проглатывает. Проверка сравнения unsigned int и unsigned short на eVC происходит без ворнингов.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Riply
Дата 22.7.2008, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Alexeis, значит придется привыкать, к тому, что "варнинги"
могут быть неправильными и отключать их на данном участке кода.
Но это некузяво.  smile 
PM MAIL   Вверх
Torsten
Дата 22.7.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 10.6.2008
Где: Pskov

Репутация: нет
Всего: 7



Если хочешь без варнингов , то можно так сделать :
Код

if (static_cast<ULONG>(pUs->Length) > BytesAlloc) 


А вообще конечно бредовый варнинг ... оба типа unsigned, а он говорит что один из них signed.
--------------------
We have no begining, we have no end. We are infinite.
PM MAIL   Вверх
Riply
Дата 23.7.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Цитата(Torsten @  22.7.2008,  17:31 Найти цитируемый пост)
Если хочешь без варнингов , то можно так сделать 


Спасибо.
После тяжких раздумий, решила все же отключать этот "варнинг"
на данном участке кода, а не заниматься привидением smile
Причина проста: отключение предупреждений в коде сразу бросается в глаза,
а предложенный вариант получается "замаскированным", что на мой взгляд не очень хорошо smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0763 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.