Титла: Да му се не види значи! Публикувано от: gat3way в Aug 26, 2011, 22:48 Ей скъсах си нервите с това. Изглежда тривиално и просто, ама не - не е.
Разглеждаме този прост случай: Цитат gat3way@debian:/tmp$ cat a.c Сега да компилираме 32-битова версия и да я изпълним: Цитат gat3way@debian:/tmp$ gcc -o a a.c -m32 Очакван резултат, нали. Айде сега да пробваме да компилираме за 64-битова архитектура и да пробваме: Цитат gat3way@debian:/tmp$ gcc -o a a.c Сега никой не е казал че е хубава идея да присвояваме указател към size_t да сочи към int и да очакваме това да работи на различни таргети, обаче gcc до 4.4 някак си автоматично се грижеше за това, защото досега не е възниквало като проблем - и работеше защото вероятно gcc-то имплицитно е правело нещо по въпроса. Всъщност, дори warning не изкарваше тъпия компилатор, освен с -Wall и аз никога не съм се замислял толкова дали е лошо или не. Минах обаче на 4.6 и нещата загрубяха доста - супер странни проблеми, странни опити да се алокират терабайти памет и тем подобни глупости. Красота. Тъп съм знам. Знам че сам съм си виновен (сега имам да преправям сума ти код) ама ще им таковам таковата на тези гадове :( Титла: Re: Да му се не види значи! Публикувано от: plandz в Aug 26, 2011, 23:16 [quote
Знам че сам съм си виновен (сега имам да преправям сума ти код) ама ще им таковам таковата на тези гадове :( [/quote] Off/ Е,добре де,ама не разбрах само дали си говориш сам,дали сам ще им таковаш таковата или искаш и ние да им таковаме таковата...като подкрепа за теб...Ние можем де! Титла: Re: Да му се не види значи! Публикувано от: gat3way в Aug 26, 2011, 23:33 Мразим gcc задето не ме оставиха да продължа да правя простотии, с две думи. Мразим и да правим простотии.
Титла: Re: Да му се не види значи! Публикувано от: spec1 в Aug 27, 2011, 12:28 Не би трябвало да ти е проблем да си сложиш проверка в самия
С/С++ код какъв компилатор се използва така,че да работи коректно ,например: if (sizeof(int)==4){ // 32-bit code .................... Титла: Re: Да му се не види значи! Публикувано от: n00b в Aug 27, 2011, 13:16 И утре когато има 128 битови системи ще има:
if (sizeof(int)==16){ // 128-bit code Титла: Re: Да му се не види значи! Публикувано от: spec1 в Aug 27, 2011, 13:27 Защо не ?!
Все пак всеки сам си избира стила на програмиране. Пък и говорим за С/С++ ... Титла: Re: Да му се не види значи! Публикувано от: b2l в Aug 27, 2011, 13:29 Защо не ?! Ти наясно ли си gat3way какво пише? Титла: Re: Да му се не види значи! Публикувано от: gat3way в Aug 27, 2011, 13:58 На 128-битова система може и да няма проблеми, стига int да е със същия размер като size_t., което обаче твърде вероятно няма да бъде така.Всъщност твърде вероятно единствено на 32-битови системи int и size_t са еднакво големи и е много лоша идея човек да свикне с този факт и да разчита на това. Единствено ми е интересно защо с по-стари версии на gcc нямаше проблем - не мога да си представя какво точно е правил gcc за да спести мъките. Вероятно някак си добавя някакъв код който увеличава указателя с 4, ама пак ми изглежда доста странно.
Титла: Re: Да му се не види значи! Публикувано от: spec1 в Aug 27, 2011, 13:59 Написал е че има някои проблеми с указатели ,в зависимост
от компилатора и т.н. , и аз дадох едно възможно решение. Разбира се, може да има и други решения на проблема. Стана ли ти ясно сега ? (отговора е към т.нар. backtolife ) Титла: Re: Да му се не види значи! Публикувано от: b2l в Aug 27, 2011, 14:04 //off
Написал е че има някои проблеми с указатели ,в зависимост Абе то на мен ми е ясно защо му отговаряш така, ама на теб не ти е ясен проблема на gat3way. |