реклама на сайте
подробности

 
 
> warning: signed and unsigned type in conditional expression
fox1
сообщение Jul 27 2010, 07:56
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 3-05-06
Из: Нижний Новгород
Пользователь №: 16 725



Добрый день !

Есть такое выражение:

char * s1;

px->n1 = px->prec < 0 ? strlen(px->s)
: (s1 = (char *)memchr((void *)px->s, '\0',
px->prec)) != 0 ? s1 - px->s : px->prec;

px->s это char *

Ругается

warning: signed and unsigned type in conditional expression

на строку : px->prec)) != 0 ? s1 - px->s : px->prec;

Где ошибка ????
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
demiurg_spb
сообщение Jul 27 2010, 17:16
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



попробуйте так:
Код
(xxx != 0U) ? ... : ...;
У Вас в настройках компилятора, видимо, задано трактовать char как unsigned char.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jul 28 2010, 10:22
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(demiurg_spb @ Jul 27 2010, 21:16) *
попробуйте так:
Код
(xxx != 0U) ? ... : ...;
У Вас в настройках компилятора, видимо, задано трактовать char как unsigned char.

А не всё ли равно, знаковое число или нет, при сравнении с нулём? unsure.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jul 28 2010, 10:34
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Варнинг выдаётся независимо от того ноль там или что-либо иное.
Главное, чтобы левая и правая части условия были одного теста (оба со знаком или оба без знака).
А так для неотрицательных чисел со знаком в дополнительном коде код совпадает с числами без знака.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jul 28 2010, 10:43
Сообщение #5


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(demiurg_spb @ Jul 28 2010, 14:34) *
Варнинг выдаётся независимо от того ноль там или что-либо иное.
Главное, чтобы левая и правая части условия были одного теста (оба со знаком или оба без знака).

Глупости какие. Это что за компилятор такие предупреждения выдаёт?
Real View 4.01 никаких проблем в таких записях не видит, потому как при сравнении с нулём их там быть не может.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jul 28 2010, 10:46
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Это не глупости. Всё зависит от уровня выдачи варнинга. Задаётся ключами для ЛЮБОГО нормального компилятора.
gcc warning options:
Код
-Wsign-compare
    Warn when a comparison between signed and unsigned values could produce an incorrect result when the signed value is converted to unsigned. This warning is also enabled by -Wextra; to get the other warnings of -Wextra without this warning, use `-Wextra -Wno-sign-compare'.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jul 28 2010, 10:55
Сообщение #7


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(demiurg_spb @ Jul 28 2010, 14:46) *
Это не глупости. Это зависит от уровня выдачи варнинга. Задаётся ключами для ЛЮБОГО компилятора.

В настройках стоит All Warnings.
И, тем не менее, компилируя unsigned char != 0 никаких предупреждений не выдаётся.

Вы сами подумайте, зачем в данном случае необходимо предупреждение?
Совершенно нормальная запись.

А вот такое - 0U - выглядит довольно странно. Разве нуль может иметь знак? smile.gif

Цитата
Warn when a comparison between signed and unsigned values could produce an incorrect result

Ну и как при сравнении целого числа (со знаком или без) на равенство нулю можно получить неверный результат?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- fox1   warning: signed and unsigned type in conditional expression   Jul 27 2010, 07:56
|- - demiurg_spb   Цитата(sonycman @ Jul 28 2010, 14:55) А в...   Jul 28 2010, 11:00
||- - sonycman   Цитата(demiurg_spb @ Jul 28 2010, 15:00) ...   Jul 28 2010, 11:03
||- - demiurg_spb   Ооо... Прощайте!   Jul 28 2010, 11:11
|- - _Bill   Цитата(sonycman @ Jul 28 2010, 14:55) В н...   Jul 28 2010, 18:18
|- - sonycman   Цитата(_Bill @ Jul 28 2010, 22:18) Сравне...   Jul 28 2010, 19:05
|- - _Bill   Цитата(sonycman @ Jul 28 2010, 23:05) Кон...   Jul 29 2010, 03:40
- - rezident   Предупреждение Цитатаwarning: signed and unsigned ...   Jul 27 2010, 23:05
- - fox1   Попробовал px->n1 = px->prec < 0 ? str...   Jul 29 2010, 07:11
|- - sonycman   Цитата(fox1 @ Jul 29 2010, 11:11) Попробо...   Jul 29 2010, 09:58
- - xemul   Если я правильно понял полёт Вашей мысли, то её мо...   Jul 29 2010, 09:59
- - fox1   Код if(px->prec < 0) { px-...   Jul 29 2010, 12:12


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 15:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01439 секунд с 7
ELECTRONIX ©2004-2016