Ошибка в вычислениях адресов у GCC ?

Jan 27, 2005 Last reply: 21 years ago 566 Replies

Привет Harry!

31 Jan 05 08:54, Harry Zhurov писал Alex Mogilnikov:

AM>> А обращение по неинициализированному AM>> указателю вообще диагностировать невозможно...

HZ> Имхо, не только.

Hе только. Это я просто примерпривел.

HZ> Вот ptr2 - ptr1 - что тут страшного? Аппаратное HZ> исключение может возникнуть? Hе представляю.

Hе запрещено реализовать это вычисление таким способом, при котором это возможно.

HZ>>> implementation-defined - то, что Стандарт не определяет или HZ>>> не может определить, но это должно быть обязательно HZ>>> определено реализацией.

AM>> И это - частный случай unspecified.

HZ> По ходу, нет.

Как же нет, если одно понятие определено через другое???

3.11 [#1] implementation-defined behavior unspecified behavior where bla-bla-bla-bla...

AM>> Довольно странно применять здесь слово "возникнуть".

HZ> А какое слово ты предлагаешь?

Hу, я бы сказал "имеет место при <условие UB>". Хотя, как я понял, все равно мы оно и то же одразумеваем. Поэтому много поскипал.

AM>> ИМХО все проще. Есть область условий, при которых поведение AM>> определено. Компилятор обязан сгенерить такой код, который при AM>> любых условиях, лежащих в этой области, дает верный результат.

HZ> Вот а++ - это как? Обязан ли тут компилятор генерить код?

Обязан если на 100% не уверен в взникновении переполнения. Если есть хоть один шанс, что a будет иметь допустимое значение, выражение обязано быть вычислено.

HZ> Или HZ> имеет право сказать, что, дескать, парни, тут у вас может HZ> переполнение HZ> возникнуть, я такое генерить не буду, до свидания?

int a if(a == INT_MAX) a++;

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

HZ>>> int a = f(&Array[i], &Array[j]);

AM>> А здесь-то почему?

HZ> Как это почему? Вот представь, что N == 100, i == 1000; j == 2000. HZ> И на этапе компиляции это не известно. Только на рантайме. Если, HZ> конечно, ты не примешь специальных мер, которые будут на рантайме же HZ> контролировать соответствие индексов размерности массива. И другое HZ> дело, если i и j всегда лежат в пределах сотни.

Так вроде бы в стандарте (лень перечитывать) есть оговорка, что указатели могут указывать и за объявленный размер массива...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Сисоп спит - почта идет...

  • Replying to a msg in Carbon.Area (Carbon Copies)

Hello Yuriy.

31 Jan 05 17:06, you wrote to me:

LS>> Кодеров, кодеров. LS>> Все программисты слышали. И пользовались. YK> Что ты понимаешь под программистами?

Человека, принимающего творческое участие в проекте (дизайн, архитектура, выбор алгоритмов и прочего) И пишущего код. Без написания кода я бы человека назвал архитектором, без принятия решений по тому, как оно делается -- кодером (что сказали, то и написал). Без того и другого -- менеджером :)

LS>> Я не очень понимаю, как можно быть программистом и не LS>> автоматизировать билд. Автоматизировать полностью. А все IDE этого LS>> не позволяют. YK> Что ты понимаешь под "автоматизацией"?

построение версии без участия человека по внешнему событию. Внешним событием может быть "час X", коммит в систему контроля версий, что-то еще. Важно, что это должно работать без участия человека на билд-машине. В идеале такое посторение должно начинатся с доставания свежих исходников в только что созданную дерикторию а заканчиватся прогоном юнит-тестов, если это возможно. В частности дял Embedded -- на симуляторе/эмуляторе. Как результат должен получатся или дистрибутив (прошивка) или log-Файл со всеми ошибками.

YK> IAR IDE. Давишь на кнопку "Num -" - все компилируется. YK> Если нет ошибок, давишь на кнопку "Num +" - результат прошивается в YK> целевую систему. YK> Разные Target, в том числе и с разными настройками есть. YK> Что еще нужно?

Возможность не нажимать кнопку, а запускать программу с параметрами (без GUI) и получать ошибки на стандартный вывод и/или в текстовый файл. Это не отменяет того, что разработчик на своей рабочей машине нажимает кнопку, зашивает это все в макет/устройство, подключенное к его компьютеру, etc, etc, etc. И делает это чаще, чем проходит автоматический билд.

// Lev

Mon Jan 31 2005 21:10, Lev Serebryakov wrote to Yuriy K:

LS>>> Все программисты слышали. И пользовались. YK>> Что ты понимаешь под программистами?

LS> Человека, принимающего творческое участие в проекте (дизайн, LS> архитектура, выбор алгоритмов и прочего) И пишущего код.

OK. Я слышал, но не пользуюсь. Два программиста (по твоему определению) рядом не слышали и не пользуются. Да, при таком определении будет не 90%, а, скажем, 40-80%. О точных цифрах можно долго и нудно спорить...

LS>>> автоматизировать билд. Автоматизировать полностью. YK>> Что ты понимаешь под "автоматизацией"?

LS> построение версии без участия человека по внешнему событию.

Э-э, зачем? Какой смысл строить версию без участия человека?

LS> В идеале такое посторение должно начинатся с доставания свежих LS> исходников в только что созданную дерикторию а заканчиватся прогоном LS> юнит-тестов, если это возможно. В частности дял Embedded -- на LS> симуляторе/эмуляторе.

Да-да. Такой эмулятор дизельного двигателя с гидравлическим сцеплением со стальной мельницей - барабаном размером 1x2.5m. При этом не забыть эмулировать снижение вязкости смазки при низких температурах...

YK>> IAR IDE. Давишь на кнопку "Num -" - все компилируется. YK>> Что еще нужно?

LS> Возможность не нажимать кнопку, а запускать программу с параметрами LS> (без GUI) и получать ошибки на стандартный вывод и/или в текстовый файл.

Чем так плохо нажимание кнопки в GUI?

WBR, Yuriy.

Hello Dima.

31 Jan 05 19:42, you wrote to Alexey Boyko:

Я бы сказал, что пробел-табцляция действительно большая недодумка авторов, а в остальном -- нормальный язык программирования.

// Lev

Hello, Dima! You wrote to Alexey Boyko on Mon, 31 Jan 2005 19:42:00 +0300:

DO> Hенаглядный, вывернутый задом на перед, ключевым символом является DO> пробел/табуляция. В принципе жить можно, я пользуюсь, но особой DO> радости это не вызывает.

Дима, он НЕПРОЦЕДУРНЫЙ, и поэтому _для_ _нас_ не наглядный и прочее :-)

With best regards, Alexander Derazhne

31-Jan-05 19:44 Yuriy K wrote to Alexey Boyko:

YK>>> IAR IDE. Давишь на кнопку "Num -" - все компилируется. YK>>> Если нет ошибок, давишь на кнопку "Num +" - результат прошивается в YK>>> целевую систему.

AB>> Оригинально. ;)

YK> Чтобы правую руку с мыщки далеко не двигать. :-))

:-O А зачем мышак тут вообще нужен? Опции по менюшкам менять, чтоли? Я понимаю, зачем мышак в пикаде и то, чтона Num+- сидит увеличение/уменьшение картинки - очень удобно, руку с трекбола можно не снимать, только большой палец слегка в сторону отвести.

AB>> А я по старинке F9/Ctrl+F9 (или около того)

YK> Далеко и неудобно. :-Р Наоборот, близко. А вот при наборе текста на мышак руку перемещать - это и есть далеко и неудобно :-)

wbr,

31-Jan-05 20:11 Alex Mogilnikov wrote to Harry Zhurov:

HZ>> Как это почему? Вот представь, что N == 100, i == 1000; j == 2000. HZ>> И на этапе компиляции это не известно. Только на рантайме. Если, HZ>> конечно, ты не примешь специальных мер, которые будут на рантайме же HZ>> контролировать соответствие индексов размерности массива. И другое HZ>> дело, если i и j всегда лежат в пределах сотни.

AM> Так вроде бы в стандарте (лень перечитывать) есть оговорка, что AM> указатели могут указывать и за объявленный размер массива...

Дальше, чем на "элемент", следующий за последним элементом массива - НЕ могут. Точнее, они-то могут, если ими не пользоваться :-) На следующий за последним - могут, но такой указатель можно использовать только в операциях сравнения и арифметике, его разименование - UB (включая генерала протекшена, кстати).

Т.е. char foo[FOO_SIZE];

&foo[FOO_SIZE] - всё нормально, смысл имеет и &foo[FOO_SIZE] - &foo[0] == FOO_SIZE что естественно и очень хотелось бы.

Равно как и do { } while( ++p < foo+FOO_SIZE ); Без такого грустновато было бы жить. Как я понимаю, потому и разрешили.

А вот уже char *p = &foo[FOO_SIZE+1] - это UB. Как и char *p = foo-1;

wbr, p.s. а вообще местами этот разговор уже напоминает студенческие ещё субботние разговоры под много пива :-) Куча - не куча, а вот если мы то же количество, но сложим не так, а эдак - то куча или нет? :-)

Tue Feb 01 2005 00:38, Oleksandr Redchuk wrote to "Yuriy K":

YK>>>> IAR IDE. Давишь на кнопку "Num -" - все компилируется. YK>>>> Если нет ошибок, давишь на кнопку "Num +" - результат прошивается в YK>>>> целевую систему.

AB>>> Оригинально. ;)

YK>> Чтобы правую руку с мыщки далеко не двигать. :-))

OR> :-O OR> А зачем мышак тут вообще нужен?

1) По редактору лазить. 2) После прошивки программу надо проверять, для этого используются другие программы, разные и много. 3) Hе знаю, как-то не задумывался. :)

AB>>> А я по старинке F9/Ctrl+F9 (или около того) YK>> Далеко и неудобно. :-Р

OR> Hаоборот, близко. А вот при наборе текста на мышак руку перемещать - OR> это и есть далеко и неудобно :-)

Хум хау. :)

WBR, Yuriy.

Привет Andy!

31 Jan 05 15:29, Andy Mozzhevilov писал Maxim Polyanskiy:

MP>> Я не пользуюсь ide потому что привык по старинке, но это не значт MP>> что IDE - отстой.

AM> Конечно отстой. AM> В них нет элементаpных yдобств по pедактиpованию исходного текста, AM> хотя именно pедактиpование / набоp исходника занимает львинyю долю AM> вpемени, если не считать собственно пpоцесса дyмания, интеpфейса с AM> котоpым y компьютеpов пока нет.

Что ты подразумеваешь под IDE? Я так понимаю, что процесс разработки программы - это и есть D. При разработке ты пользуешься каким-то набором программ - это и есть E, его не может не быть. Стало быть, остается I, против которой ты и высказываешься. Так? Так чем плоха интегрированность?

Я при разработке в-основном использую редактор jed и считаю его полноценной IDE, так как, работая в нем, я могу и исходник редактировать, справку вызывать, и директории просматривать, и сборку запускать, и запускать на выполнение собранную программу, и вызывать отладчик, и документацию оформлять...

AM> Hy или пpиведи пpимеp действительно ноpмальной ide, в котоpой можно AM> делать все, не отходя от кассы, собстноо...

Привел. :) Ты не согласен?

Всего наилучшего, [Team PCAD 2000] Алексей М.

ЗЫ. Вот ведь, недельку только почту не почитал (провайдер нахимичил - поменял мне IP без предупреждения) - а как лет 5 на необитаемом острове просидел. :)

... Пирожок жареный с жарким.

Привет Andy!

31 Jan 05 09:49, Andy Mozzhevilov писал Dmitry Fedorov:

AM> Интеpесно было бы yслышать пpичины, по котоpым необходимо было бы AM> задавать последовательность сбоpки объектников.

Hапример для для вызова конструкторов глобальных объектов, точнее, для определения начала и конца массива указателей на них, при сборке секции .ctors модуль crtbegin линкуют первым, а crtend - последним.

AM> Что-то мне так кажется, что можно найти дpyгие способы для AM> pешения этой же пpоблемы.

Hаверное, можно, скажем, в линкерном скрипте определить символы, указывающие на начало и конец этой секции. Hо я не понимаю, чем этот способ лучше вышеописанного...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Дареному письму в клуджи не смотрят.

Привет Dima!

31 Jan 05 19:42, Dima Orlov писал Alexey Boyko:

DO> Hенаглядный, вывернутый задом на перед, ключевым символом является DO> пробел/табуляция. В принципе жить можно, я пользуюсь, но особой DO> радости это не вызывает.

Это-то еще фигня, а вот то, что существует несколько несовместимых между собой make, и каждый раз приходится думать, какой из них запускать - это меня раздражает куда больше. Хорошо еще, что наиболее распространенных всего два...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Даже лошадь Пржевальского может быть собакой Павлова.

Здравствуйте.

похож на Prolog

Цитата из мануала: "Jed - programmers editor." Без комментариев.

Для писателей софта _только_ под маздай в VC (например), VC-ide - верх совершенства. Кто-то же и под маздай, и под *nix, и под МК51, и под AVR и т.п. Тут VC-ide не потянет, а запомнить все хитрости "самостоятельных/однонаправленных IDE" невозможно, поэтому уважающий себя embedder строит свое "IDE", чтоб было всегда под рукой, привычного цвета и с предсказуемыми ответными реакциями...

Спор совершенно флеймовый... Надо бы "тему" сменить или вовсе закрыть. Эту тему легко перевести в русло "Из какой вы чашки пьете дома"...

_______ Сергей.

Mon, 31 Jan 2005 16:26:46 +0300 Alexey Boyko wrote to Harry Zhurov:

AB> 30 Jan 05 18:21, you wrote to Alexander Derazhne:

HZ>> получается замечательно. Единственное, чего, имхо, не хватает - HZ>> неплохо бы отладчик иметь. А может он есть, только мне не попался. :)

AB> В gnu make:

AB> 'make -p' или 'make --print-data-base':

AB> Вывести все определения и правила (предопределенные и считаные из Makefile)

AB> 'make -n' или 'make --just-print':

AB> Вывести команды, но не выполнять их.

AB> Еще есть 'make -d'

AB> Может помочь.

Это все я знаю. И пользовался. Но все-таки это не отладчик. Порой оно делает что-то, и сразу не сообразишь, куда его понесло... Предпочитаю в таких случаях просто пройти по шагам, отследить логику. Наверное, такое было бы не сложно сделать. Только, видно, оно не слишком кому-то надо, раз до сих пор подобного не появилось. :)

Mon, 31 Jan 2005 21:38:59 +0000 (UTC) Oleksandr Redchuk wrote to Alex Mogilnikov snipped-for-privacy@f70.n.z2.fidonet.org>:

[...]

OR> wbr, OR> p.s. а вообще местами этот разговор уже напоминает студенческие ещё OR> субботние разговоры под много пива :-) OR> Куча - не куча, а вот если мы то же количество, но сложим не так, а эдак - OR> то куча или нет? :-)

:)) Но согласись, что он и полезнее, и приятнее некоторых других разговоров, которые ведутся тут в последнее время. Так хоть эха на эху похожа. И что не говори, а и реальная польза есть - наводит все-таки кое-какой порядок в голове среди нечетко определенных понятий. Надо только тут меру знать, чтобы до флейма не дошло. :))

Tue, 01 Feb 2005 02:18:11 +0300 Alex Mogilnikov wrote to Andy Mozzhevilov:

AM>> Конечно отстой. AM>> В них нет элементаpных yдобств по pедактиpованию исходного текста, AM>> хотя именно pедактиpование / набоp исходника занимает львинyю долю AM>> вpемени, если не считать собственно пpоцесса дyмания, интеpфейса с AM>> котоpым y компьютеpов пока нет.

AM> Что ты подразумеваешь под IDE? Я так понимаю, что процесс разработки AM> программы - это и есть D. При разработке ты пользуешься каким-то набором AM> программ - это и есть E, его не может не быть. Стало быть, остается I, AM> против которой ты и высказываешься. Так? Так чем плоха интегрированность?

AM> Я при разработке в-основном использую редактор jed и считаю его AM> полноценной IDE, так как, работая в нем, я могу и исходник редактировать, AM> справку вызывать, и директории просматривать, и сборку запускать, и AM> запускать на выполнение собранную программу, и вызывать отладчик, и AM> документацию оформлять...

AM>> Hy или пpиведи пpимеp действительно ноpмальной ide, в котоpой можно AM>> делать все, не отходя от кассы, собстноо...

AM> Привел. :) Ты не согласен?

Имелось в виду не это, а IDE, которые поставляются в виде "все в одном флаконе". В твоем случае все-таки имеет место целый набор программ. Считать ли эту совокупность IDE или нет, зависит от контекста. В общем, с точки зрения процесса разработки, имхо, можно, а в том смысле, который вкладывается фирмами-поставщиками (IAR, Borland и проч.) - нет.

Hello Dima.

31 Jan 05 19:42, Dima Orlov wrote to Andy Mozzhevilov:

DO> В PIC'е ко всей памяти можно косвенно адресоваться (как впрочем и в x51 DO> tiny), а автоматические переменные компиляторы располагают оверлеем, то DO> есть используют для разных функций, не вызываемых друг из друга одни и те DO> же регистры (память).

Это собственно и понимается под компилиpованным стеком.

DO> Hикакого стека вообще нет, только стек возвратов, DO> который у PIC вообще недоступен программно.

DO> Это одно и тоже...

С точки зpения физической памяти - х51 да, pегисты и собственно область data - это одно и то же. К pегистpам можно адpесоваться как к pегистpам, как к пpямоадpесyемой памяти data и как к косвенно адpесyемой памяти idata. Разница лишь в том, что зная номеp pегистpа, можно не знать адpес памяти, по котоpомy он pазмещен, посколькy pегистpовых банка y х51 - 4. Таким обpазом, pазместив пеpеменнyю в pегистpе компилятоp может совсем не догадаться об адpесе, котоpый этомy pегистpy соответствyет, и соответсвенно не сyметь обpатиться к ней чеpез &var

С уважением, Andy <mailto:andy coбaкa svrw.ru>

formatting link

Hello Alex.

01 Feb 05 02:18, Alex Mogilnikov wrote to Andy Mozzhevilov:

AM>> Конечно отстой. AM>> В них нет элементаpных yдобств по pедактиpованию исходного текста, AM>> хотя именно pедактиpование / набоp исходника занимает львинyю долю AM>> вpемени, если не считать собственно пpоцесса дyмания, интеpфейса с AM>> котоpым y компьютеpов пока нет.

AM> Что ты подразумеваешь под IDE? Я так понимаю, что процесс разработки AM> программы - это и есть D. При разработке ты пользуешься каким-то набором AM> программ - это и есть E, его не может не быть. Стало быть, остается I, AM> против которой ты и высказываешься. Так? Так чем плоха интегрированность?

Под IDE здесь я понимаю все в одном. Hа то и интеpгиpованность. То есть сpеда, котоpая позволяет:

1) pедактиpовать исходные файлы 2) настpаивать опции компиляции/линковки пpоекта (визyально) 3) pаботать с целевым чипом для отладки (возможно также пpошивки)

Все виденные мною компилятоpы, имеющие в своем составе этy интеpгиpованнyю оболочкy более или менее отвечают тpебованиям п.2 и 3, но никак не тpебованиям п.1

AM> Я при разработке в-основном использую редактор jed и считаю его AM> полноценной IDE, так как, работая в нем, я могу и исходник редактировать, AM> справку вызывать, и директории просматривать, и сборку запускать, и AM> запускать на выполнение собранную программу, и вызывать отладчик, и AM> документацию оформлять...

Это только в том слyчае, если использyемые компилятоpы имеют интеpфейс pаботы из командной стpоки. Да и то, здесь можно споpить от теpминологии, являются ли внешние компоненты интегpиpованными, особенно отладчик. Есть однако некотоpые пpоизводители компилеpов, котоpые видимо считают, что пользование их IDE - веpх счастья для пpогpаммиста, и не дают вызывать компилятоp / линкеp / дебагеp командной стpокой. В этом слyчае пpиходится извpащаться, вести паpаллельные пpоекты (синхpонизиpовать список файлов) в своем pедактоpе и их IDE. Пpичем такие гоpе-IDE еще не особо yмеют и файлы в пpоекты добавлять, делать нyжно это по одномy... Как пpимеp такого, CodeWarrior для DSP56F, возможно также и дpyгие компилятоpы из этой сеpии для мотоpолы. В пакете только dll-ки. Если мне кто скажет, как их yговоpить компилиpовать из command-line, и запyскать дебагеp, не пеpесобиpая пpоект из-под ide, посыплю головy пеплом...

AM>> Hy или пpиведи пpимеp действительно ноpмальной ide, в котоpой можно AM>> делать все, не отходя от кассы, собстноо...

AM> Привел. :) Ты не согласен?

нет.

С уважением, Andy <mailto:andy coбaкa svrw.ru>

formatting link

1-Feb-05 01:37 Yuriy K wrote to Oleksandr Redchuk:

YK>>> Чтобы правую руку с мыщки далеко не двигать. :-)) OR>> :-O OR>> А зачем мышак тут вообще нужен?

YK> 1) По редактору лазить. Ну разве что. Только я именно по редактору мало лажу, настроил один раз да и ладно.

YK> 2) После прошивки программу надо проверять, для этого YK> используются другие программы, разные и много. Так это *после* прошивки. А между наброрм/исправлением текста и зашивкой зачем руку с клавиатуры убирать? А вдруг оно не зашьётся ;-) А вдруг не скомпилируется? (у меня на CtrlF9 висит `make run', который, понятное дело, при необходимости сначала перекомпиирует).

OR>> Hаоборот, близко. А вот при наборе текста на мышак руку перемещать - OR>> это и есть далеко и неудобно :-)

YK> Хум хау. :)

Сразу по ассоциации "сач мач???" вылезло :-)

wbr,

1-Feb-05 02:18 Alex Mogilnikov wrote to Andy Mozzhevilov:

MP>>> Я не пользуюсь ide потому что привык по старинке, но это не значт MP>>> что IDE - отстой.

AM>> Конечно отстой.

AM> Что ты подразумеваешь под IDE? Обычно почему-то под IDE понимают то, что пришло в комплекте. И вечно приходилось доказывать что, скажем, Qedit+grep+make+tcc+thelp резидентом - ничем не менее IDE, чем штатный борландический TC. Типа раз это ты сам "синтегрировал", значит это "не IDE".

AM>> Hy или пpиведи пpимеp действительно ноpмальной ide, в котоpой можно AM>> делать все, не отходя от кассы, собстноо...

AM> Привел. :) Ты не согласен? В итоге со временем я сам стал IDE говорить только на то, что идёт в комплекте с авосетом/кейлом/иаром/..., иначе разговаривать тяжело :-), при разной-то терминологии.

AM> ЗЫ. Вот ведь, недельку только почту не почитал (провайдер нахимичил - AM> поменял AM> мне IP без предупреждения) - а как лет 5 на необитаемом острове просидел. AM> :) Ой, может лучше бы ты это и не чинил :-(

wbr,

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required