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

 
 
> Как в CodeVision работает галочка"Promote char to int"?
-=Женек=-
сообщение Jan 9 2011, 19:38
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



Господа, есть вопрос.
Полдня потратил на вылавливание косяка в программе.

Есть функция, которая принимает параметр типа unsigned int:

void Func(unsigned int i)

Косяк был в том, что я подставлял туда переменную типа unsigned char, умноженную на некое число. КОгда произведение unsigned char на это число не превышало 256, все было нормально, когда превышало - начинались косяки.
Т.Е., не важно какого типа переменная произведения, если один из множителей unsigned char, произведение выше 256 никак не получится.

Нашлось 2 решения.
Первое - сделать эту переменную типа unsigned int.
Второе - поставить в настройках галочку - "promote char to int".

По последнему пункту вопрос - что все-таки делает эта галка? Преобразуетт char в int по необхоидмости, или же преобразуются все char переменные?
Меня беспокоит экономия памяти, вот я и думаю - какое из приведенных решений рациональней - первое или второе?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
-=Женек=-
сообщение Jan 10 2011, 06:43
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



Цитата
В вашем случае это не поможет-только первый вариант.


Послушайте, ну я же написал - "нашлось 2 решения", значит помогло, значит с этой галочкой работает.
Или же я вас неправильно понял...

Дело в том, что это решение уж очень простое и непонтно, зачем тогда вообще эту галочку нужно убирать. Я так подозреваю, что используюя галочку, а не конкретную переменную, я чем-то жертвую...
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jan 10 2011, 07:56
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768




Цитата(-=Женек=- @ Jan 10 2011, 12:43) *
Косяк был в том, что я подставлял туда переменную типа unsigned char, умноженную на некое число. КОгда произведение unsigned char на это число не превышало 256, все было нормально, когда превышало - начинались косяки.

Послушайте, ну я же написал - "нашлось 2 решения", значит помогло, значит с этой галочкой работает.
Или же я вас неправильно понял...


Странно это..В случае умножения или сложения одинаковых типов следить за переполнением должен программист и опция "promote char to int" влиять вроде-бы не должна.
из хэлпа CV:
Checking the Promote char to int check box enables the ANSI promotion of char operands to int.
To prevent overflow on 8 bit addition or multiplication, casting may be required.
The compiler issues warnings in these situations.
Example:

void main(void) {
unsigned char a=30;
unsigned char b=128;
unsigned int c;


/* This will generate an incorrect result, because the multiplication
is done on 8 bits producing an 8 bit result, which overflows.
Only after the multiplication, the 8 bit result is promoted to
unsigned int */
c=a*b;


/* Here casting forces the multiplication to be done on 16 bits,
producing an 16 bit result, without overflow */
c=(unsigned int) a*b;
}

практически ваш случай,если я правильно вас понимаю.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- -=Женек=-   Как в CodeVision работает галочка"Promote char to int"?   Jan 9 2011, 19:38
- - WHALE   Цитата(-=Женек=- @ Jan 10 2011, 01...   Jan 10 2011, 05:31
|- - XVR   Цитата(WHALE @ Jan 10 2011, 13:56) Странн...   Jan 11 2011, 06:05
- - sigmaN   И ещё раз скажу это: CodeVision в топку!!...   Jan 10 2011, 09:25
|- - Lmx2315   тут обсуждали преобразование типов в CV http://el...   Jan 11 2011, 14:52
- - -=Женек=-   XVR, спасибо, но дело не в этом. ПРоблемы то не су...   Jan 11 2011, 14:00
|- - XVR   Цитата(-=Женек=- @ Jan 11 2011, 20...   Jan 11 2011, 14:25
- - -=Женек=-   Цитатачто отрицательно скажется на размере занятог...   Jan 11 2011, 14:54
- - sigmaN   Да ладно вам, люди. Уж что что, а начинать и привы...   Jan 11 2011, 18:27
- - Deka   А вот с этого места поподробнее пожалуйста! Хо...   Jan 14 2011, 16:41
|- - demiurg_spb   Цитата(Deka @ Jan 14 2011, 22:41) А вот с...   Jan 14 2011, 19:22
- - sigmaN   Я бы сказал, что CV использует компилятор с Си-под...   Jan 15 2011, 07:43
- - Deka   Мда... Лажанулся... Прошу прощения. Читал CV, а ду...   Jan 15 2011, 10:53
- - sigmaN   Не, Keil это хорошо. Даже очень хорошо))   Jan 15 2011, 14:29
- - Serj78   Скажу, как пересевший с CV на Кейл К CV возвр...   Jan 16 2011, 19:27


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

 


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


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