Титла: gcc bug ? Публикувано от: neutron_stz в May 27, 2014, 05:28 Тази сутрин докато си правих малоумни експерименти забелязах нещо необичайно. Значи, след като се компилира следния код с gcc - unsigned int си остава int.
Код: #include <stdio.h> Нещо bug с gcc-то ли е ? Титла: Re: gcc bug ? Публикувано от: romeo_ninov в May 27, 2014, 06:32 На С е много опасно да ползвате такова сравнение за излизане от цикъл. И проверявали ли сте колко е int на вашата машина? Защото може да е само FFFF
Титла: Re: gcc bug ? Публикувано от: gat3way в May 27, 2014, 08:42 Никакъв бъг не е в gcc, щом като искаш да ти се печата signed int, защо се учудваш от резултата? Aко не искаш да става така ползвай %u
Титла: Re: gcc bug ? Публикувано от: neutron_stz в May 27, 2014, 11:01 На С е много опасно да ползвате такова сравнение за излизане от цикъл. И проверявали ли сте колко е int на вашата машина? Защото може да е само FFFFЗащо да е опасно ? п.п. 32 бита е, не е 16 Никакъв бъг не е в gcc, щом като искаш да ти се печата signed int, защо се учудваш от резултата? Aко не искаш да става така ползвай %uАхам, мерси :) Титла: Re: gcc bug ? Публикувано от: romeo_ninov в May 27, 2014, 11:17 Защото може никога да не стигнете границата. И по спомени ако сравнявате две цели числа по-малкото се конвертира до по-голямото и тогава се сравняват. Т.е. ако имате 0xFFFF и го сравнявате с 0xFFFFFFFF всъщност сравнявате 0x0000FFFF с 0xFFFFFFFF и се получава безкраен цикълНа С е много опасно да ползвате такова сравнение за излизане от цикъл. И проверявали ли сте колко е int на вашата машина? Защото може да е само FFFFЗащо да е опасно ? Проверявате ли го в програмата дали е 16 или 32 битово? А ако пуснете програмата на друга платформа? Или разчитате на описания? Титла: Re: gcc bug ? Публикувано от: gat3way в May 27, 2014, 11:26 C99 ги решава тези неща със stdint.h. Лошото е че системните API-та не го ползват и много скоро пак опираш до стандартните типове. Най-грозно е с неща от сорта на size_t и off_t, като ги оплескаш става дискотека преминавайки от 32-битова система на 64-битова или обратното, в зависимост от случая.
Титла: Re: gcc bug ? Публикувано от: romeo_ninov в May 27, 2014, 11:48 C99 ги решава тези неща със stdint.h. Лошото е че системните API-та не го ползват и много скоро пак опираш до стандартните типове. Най-грозно е с неща от сорта на size_t и off_t, като ги оплескаш става дискотека преминавайки от 32-битова система на 64-битова или обратното, в зависимост от случая.Мдааа, нещо такова може да направи програмката малко по-надеждна Код: int j; |