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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Code::Blocks и приведение char к int, ерунда какая 
:(
    Опции темы
NYX
Дата 28.12.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 9.1.2007
Где: Россия, Москва

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



Здравствуйте товарисчи! Оч спецфчскй вопрос возник. Не так давно по обстоятельствам пришлось заюзать компилятор Code::Blocks smile Но вот беда, ранее написанный мною хидерок не работает. А теперь вопрос:
Я знаю что есть приведение типов а есть такие ситуации когда приведение типов вовсе не обязательны. Например if (int_a == char_b) // то есть если переменная a лежит в диапазоне 256 и она сравнивается с символьным типом, то либо true либо false. Если конкретнее, у меня места в коде, когда надо определить используемые диапазоны значений входящих массивов символьного типа. Ну как бы делаю это очень просто if (charSymbol >= 47) // значит вероятно это цифры. Но компилятор спокойно на стадии сборки сообщает следующее: Компаринг int и char всегда будет возвращать 1 smile то есть определить как бы не получается. Мне как бы в принципе не важно что за компилятор использовать, главное что бы он был ооочень небошого размера и что вот не было всяких лишностей типо ОГРОМНЫХ VCL библиотек и прочее. Так что если это дело является особенностью C::B то плизз, посоветуйте какой нить компилятор который вот нужен мне по вышеописанным параметрам. А если это дело в C::B решаемо, то просьба, подскажите smile Спасибо заранее за ваши отзывы! (переписать или типо вставлять приведение или перегонять данные из типа в тип не советуйте... кхм кода там дай боже, и переписывать то что по идее должно работать, это не выход счас для меня)
--------------------
'long long long' is too long for GC
PM   Вверх
comcon1
Дата 29.12.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Проверил GCC вот таким кодом:
Код

#include "stdio.h"

int main() {
    char a = '0';
    int b = 50;
    if (a > b)
        printf("yes %d",a);
    else
        printf("no %d",a);
    return 0;
}


Подставлял разные буквы:
Код

m@liquidspice ~/test
$ g++-4.exe -o tst1 tst1.cpp

m@liquidspice ~/test
$ ./tst1.exe
yes 48
m@liquidspice ~/test
$ g++-4.exe -o tst1 tst1.cpp

m@liquidspice ~/test
$ ./tst1.exe
no 48


Ни ругани, ни аномального поведения. Да и за третьим не замечал такого.

Добавлено через 4 минуты и 10 секунд
Подожди, сомнение закралось в меня и я почитал про C::B. Code::Blocks - это же не компилятор, это IDE! Ты напиши, какой у тебя компилятор-то.


--------------------
PM MAIL   Вверх
mes
Дата 29.12.2009, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



NYX, для начала покажите реальный кусок кода, на который ругается компилятор и его ругань.



--------------------
PM MAIL WWW   Вверх
NYX
Дата 29.12.2009, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 9.1.2007
Где: Россия, Москва

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



эммм
Multiple compiler support:
GCC (MingW / GNU GCC)
MSVC++
Digital Mars
Borland C++ 5.5
Open Watcom
...and more


mingw стало быть smile по дефолту smile

Странно, почему то этого не происходит больше, теперь все работает и не могу понять каким образом smile сначала не знал как сделать, теперь не знаю как сломать smile

вот фрагментец:
Код

void NGSS::Generis(char *arg_a, char *arg_b)
{
if ((strlen(arg_a) > 256) | (strlen(arg_b) > 256))
    {
    strcpy(NGSS::ERROR, " -- NGSS::Generis length of ARG_A|ARG_B > 256");
    return;
    }

for (int argindex = 0; argindex < 256; argindex++)
    {
    for (char range = 0; range < 47; range++)
        {
        if (arg_a[argindex] == range)
        strcpy(NGSS::ERROR, "Symbols");
        }
    }
//.........................
}


Это как бы то, на что раньше компилятор матерился... точнее как матерился, он запускался, но результатом работы всегда было true

Это сообщение отредактировал(а) NYX - 29.12.2009, 01:15
--------------------
'long long long' is too long for GC
PM   Вверх
comcon1
Дата 29.12.2009, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Нашел вот такой чпок:
Цитата

-Wtype-limits
    Warn if a comparison is always true or always false due to the limited range of the data type, but do not warn for constant expressions. For example, warn if an unsigned variable is compared against zero with `<' or `>='. This warning is also enabled by -Wextra. 


Очисть объектные файлы и собери снова. И версию GCC назови заодно.

Добавлено через 3 минуты и 2 секунды
И кстати, я не пойму, нахрена тебе второй цикл, если можно просто:
Код

if (arg_a[argindex] < 47) {
// бла-бла
}



--------------------
PM MAIL   Вверх
NYX
Дата 29.12.2009, 03:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 9.1.2007
Где: Россия, Москва

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



Да не циклы это я как бы для проверки вставил smile там совсем по другому все smile А версия GCC кажысь одна из последних smile Вот какая счас на оффсайте кодблокс лежит в сборке с их IDE такая вот у меня и стоит smile Апасибо за ответы, благо теперь сел за RAD smile На Eee 701 особо не по кодишь smile чисто символически тока еси 

Да а сообщение один в один как у меня было!

Это сообщение отредактировал(а) NYX - 29.12.2009, 03:49
--------------------
'long long long' is too long for GC
PM   Вверх
bsa
Дата 29.12.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(NYX @  29.12.2009,  03:47 Найти цитируемый пост)
Да а сообщение один в один как у меня было!
Конечно, а почему должно быть другое? Тут просто смысл в том, что компилятор предупреждает когда видит конструкции if (uint_x < 0) или if (uint_x >= 0)... Тут же понятно, что unsigned всегда будет больше либо равен нулю.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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