|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.03.2014, 21:22 | #1 |
Пользователь
Регистрация: 10.05.2012
Сообщений: 24
|
Реакция разных компиляторов на unsigned short
Всем доброго времени суток. На днях столкнулся с непредсказуемым поведением компиляторов на переменную типа unsigned short. Собственно имелся такой код:
Код:
При компиляции через VS или на сайте codeforces программа функционировала нормально. По совету знакомого поменял unsigned short на int, хотя вроде как это относится к переменной PhotoCount и не должно быть связано c PhotoSize... Собственно сам вопрос: Как может быть связан тип переменной с компилятором, как может "неверный" тип переменной влиять на исполнение программы в целом? |
16.03.2014, 01:23 | #2 | ||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Возможно это связанно с типом переменной
Код:
Код:
Цитата:
Цитата:
|
||
16.03.2014, 10:41 | #3 | |
Пользователь
Регистрация: 10.05.2012
Сообщений: 24
|
Цитата:
С этим не как не связано. Ставил и int, и short - программа не хотела правильно работать, до тех пор пока тип unsigned short у PhotoCount не задал. Char можно использовать как и символьный тип, так и целочисленный(что вызывает у меня когнитивный диссонанс). Последний раз редактировалось J1Mmy; 16.03.2014 в 10:46. |
|
16.03.2014, 11:23 | #4 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2J1Mmy
ты объявляешь переменную одним типом (char или unsigned short), а scanf-у просишь считать значение РАЗМЕРОМ int. если у тебя переменная unsigned short - считывай ее так: scanf("%hu", &i) (от half unsigned). если хочешь считать unsigned char - "%hhu" (half half unsigned). написал код с UB и ругает компиляторы. ну что за люди
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
16.03.2014, 11:30 | #5 | |
Пользователь
Регистрация: 10.05.2012
Сообщений: 24
|
Цитата:
Код:
И я не ругаю компилятор, а меня интересует вопрос, почему так поразному реагируют компиляторы на один и тот же код. P.S: За %hu и %hhu спасибо. Не знал, что спецификаторы можно повторять несколько раз. Последний раз редактировалось J1Mmy; 16.03.2014 в 11:39. |
|
16.03.2014, 11:40 | #6 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2J1Mmy
рассмотрим такой пример // КОД с UB Код:
Цитата:
когда пишешь на сях нужно идеально понимать, что ты делаешь и зачем. т.к даже правильно работающая с виду программа может содержать ошибки, которые могут проявиться на другом компиляторе, другом процессоре и тп. в твоем случае - классический UB да, в случае твоего примера. ты объявил char и int. в обоих случаях считываешь %d. char у тебя после ввода int не перезатирается, но ты перезатираешь что-то другое, что находится выше char по стеку. пример: // КОД с UB Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 16.03.2014 в 11:46. |
|
16.03.2014, 12:04 | #7 | |
Пользователь
Регистрация: 10.05.2012
Сообщений: 24
|
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Компиляторы компиляторов(генераторы парсеров) | Пепел Феникса | Общие вопросы по программированию, компьютерный форум | 6 | 14.12.2011 20:53 |
Для типов данных char, short, int, long с квалификаторами signed, unsigned составить программу, которая, | listiksasha | Фриланс | 4 | 21.02.2011 12:26 |
Для типов данных char, short, int, long с квалификаторами signed, unsigned составить программу, которая, | listiksasha | Помощь студентам | 2 | 20.02.2011 12:57 |
Сравнение скорости компиляторов | Umen | Обсуждение статей | 13 | 05.10.2009 19:48 |