Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2019, 10:21

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: 32 vs 64-bit, вопрос.
СообщениеДобавлено: 01 авг 2017, 14:49 
Заглядывает иногда

Зарегистрирован: 08 фев 2016, 01:50
Сообщения: 66
Всем привет.
Коллега отдал код (среда CodeBlocks, компилятор CNU GCC), который у него работает. У меня же одна из его функций возвращает ошибку. Разницы в данных нет, версия IDE та же самая.
Отличия только в разрядности ОС - у него 32-битная, а у меня 64-битная. Проверил у себя в виртуальной машине на 32-битной ОС - ошибки нет, все работает.

Полагаю, что дело в может быть в переменных, вернее в их разном представлении в этих ОС, но до конца не понимаю в чем именно дело и как исправить.
Буду благодарен за любые наводки :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 32 vs 64-bit, вопрос.
СообщениеДобавлено: 01 авг 2017, 14:54 
Старожил

Зарегистрирован: 28 янв 2012, 21:27
Сообщения: 302
Откуда: Питер
Где код? И какая ошибка?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 32 vs 64-bit, вопрос.
СообщениеДобавлено: 01 авг 2017, 15:13 
Заглядывает иногда

Зарегистрирован: 08 фев 2016, 01:50
Сообщения: 66
BBS писал(а):
Где код? И какая ошибка?


Код:
#define WORD uint32_t
#define LEN  9

WORD r[LEN];
WORD t_x[LEN];


if(cmp(LEN, r, t_x)==0)
{
   return 0;
}
else{
   return -1;
}
   


Функция cmp возвращает -1, реализация ниже :

Код:
// какое из двух беззнаковых чисел, представленных в массивах a и b, больше
// 1 - первое, -1 - второе, 0 - одинаковые
// len - длина числа в словах
int cmp(int len, WORD * a, WORD * b){
   int i = len-1;
   while((a[i]==b[i]) && i>=0) i--;
   if(i<0) return 0;
   if(a[i]>b[i]) return 1;
   return -1;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 32 vs 64-bit, вопрос.
СообщениеДобавлено: 01 авг 2017, 16:20 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6157
Цитата:
Код:
// какое из двух беззнаковых чисел, представленных в массивах a и b, больше
// 1 - первое, -1 - второе, 0 - одинаковые
// len - длина числа в словах
int cmp(int len, WORD * a, WORD * b){
   int i = len-1;
   while((a[i]==b[i]) && i>=0) i--;
   if(i<0) return 0;
   if(a[i]>b[i]) return 1;
   return -1;
}

на
Код:
int32_t cmp(int32_t len, WORD * a, WORD * b){
   int32_t i = len-1;
   while((a[i]==b[i]) && (i>=0)) i--;
   if(i<0) return 0;
   if(a[i]>b[i]) return 1;
   return -1;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 32 vs 64-bit, вопрос.
СообщениеДобавлено: 01 авг 2017, 16:40 
Старожил

Зарегистрирован: 07 авг 2014, 17:15
Сообщения: 383
Откуда: дальнее надмосковье
@u37

А какая разница между int и int32_t на 32/64-битной ОС? Никакой разницы ведь нет, так и так будет 32-битное знаковоное число, разве нет?

@charoit

Цитата:
Функция cmp возвращает -1, реализация ниже :

На первый взгляд ошибок не заметил. Ну кроме того, что нет инициализации сравнимаемых данных. Надеюсь, что Вы не забыли про это а просто убрали инициализацию чтобы код в посте был меньше? В противном случае в массивах будет мусор, результат не однозначен. Ну и включите все warning-и компилятора чтобы в следующий раз не..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 32 vs 64-bit, вопрос.
СообщениеДобавлено: 01 авг 2017, 17:03 
Заглядывает иногда

Зарегистрирован: 08 фев 2016, 01:50
Сообщения: 66
Да, инициализацию убрал, чтобы сократить код.

С заменой на int32_t тоже не совсем понял, проверил - ошибка осталась..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 32 vs 64-bit, вопрос.
СообщениеДобавлено: 01 авг 2017, 17:06 
Старожил

Зарегистрирован: 07 авг 2014, 17:15
Сообщения: 383
Откуда: дальнее надмосковье
charoit писал(а):
Да, инициализацию убрал, чтобы сократить код.

С заменой на int32_t тоже не совсем понял, проверил - ошибка осталась..

Ну тогда просим сравниваемые данные в студию, чтобы мы тоже могли проверить Ваше утверждение что результат отличается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 32 vs 64-bit, вопрос.
СообщениеДобавлено: 01 авг 2017, 21:23 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 677
так что за ошибка ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 32 vs 64-bit, вопрос.
СообщениеДобавлено: 01 авг 2017, 21:50 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1740
А почему не запустить под отладчиком и посмотреть в деталях.
Чуть-чуть поработать надо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB