Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Это не про дельфи 2005, а про дельфи 6.   Найти похожие ветки 

 
Суслик ©   (2005-03-09 23:07) [0]

Добрый день. Когда я поставил дельфи 2005, то обнаружил, что есть некоторые синтаксические конструкции, которые не компилируются. Например такая

const
  a = 10;
var
  aa: array [a+1..a+2] of integer;


Ошибка бывает на первом "a" после "[". Сообщение "indent a redeclared".

Перед покупкой дельфи 2005 есно решил его поизучать. Изучаю триал. Там эта ошибка в точности повторяется, как и в "паленой" версии, которую я исследовал раньше.

Естесно возник вопрос: в чем дело? С точки зрения синтаксиса тут все верно. Полез в gramar (есть в штатном хелпе дельфи 6). Т.к. в 2005 его не нашел, то взял из дельфи 6.

И с удивлением обранружил, что такая конструкция

const
  a = 10;
var
  aa: array [(a)..(a)] of integer;


в дельфи 6 дает ошибку на "a" ровно с тем же сообщением. При этом

const
  a = 10;
var
  aa: array [a..(a)] of integer;

компилиться нормально

Понятно в чем дело - несмотря на то, что "(a)" есть корректное константное выражение компилятор путает его с "enumeration type", который также допустим в массиве. Т.е. писать
var
  aa: array [(a)] of integer;

абсолютно корректно.

Поэтому вопрос про дельфи 6: не является ли тот факт, что код
const
  a = 10;
var
  aa: array [(a)..(a)] of integer;

не компилиться ошибкой компилятора?
Или я неверно понимаю gramar?

ЗЫ. Вопрос все же косвенно связан с дельфи 2005. Дело в том, что возможно я пойму, что я неверно понимаю gramar как таковой и мои претензии к компилятору дельфи 2005 необоснованны.

ЗЗЫ. Проверялось и на дельфи 6 и на дельфи 6+сп 2


 
Ломброзо ©   (2005-03-09 23:38) [1]

Насколько я помню, что-то подобное тут приводил MBo и они в четыре челюсти с DiamondShark`ом этот вопрос успешно разжевали. Но прелесть ситуации в том, что для того, чтобы добиться такой ошибки, светлейшие гойловы мастаков пыхтели над попыткой её сэмулировать в течение эдак постов двадцати. Т.е. ошибка из серии "Нарочно не придумаешь". А у Вас - хоп! "Шол-шол и вот случайно нашол".
И причём не в первый раз.


 
суслик ©   (2005-03-10 00:02) [2]

Я в ms sql сервере 2 ошибки нашел. Вроде наш сервермен их репортовал.

Не программистом мне надо было быть :)


 
суслик ©   (2005-03-10 00:03) [3]

Думаю, что все дело, что в паскале не совсем контексносвободная грамматика. :(

Я не проводил исследование т.к. не видел полной грамматики (может кто видел? :)) Но такое ощущение у меня есть.


 
Димон   (2005-03-10 10:43) [4]

Попробуйте кто-нить в дельфи 6 или 7 такой код

const
 a = 10;
var
 aa: array [(a)..(a)] of integer;


выдает ошибку компиляции на первом после "[" идентификаторе "а" со с мотивировкой - "identifier receclared"?


 
_silver ©   (2005-03-10 10:46) [5]

Димон   (10.03.05 10:43) [4]
Delphi7 - да.


 
Димон   (2005-03-10 10:47) [6]


>  [5] _silver ©   (10.03.05 10:46)

Т.е. выдает ошибку?
И что ты про это думаешь? Чья ошибка? Я неверно грамматику понимаю? Или как?


 
Закулиса Мировая   (2005-03-10 10:53) [7]

Да. Ничего. ДНК. Да. Риторический вопрос.


 
_silver ©   (2005-03-10 10:53) [8]

Димон   (10.03.05 10:47) [6]
Да, выдаёт.
Build
 [Error] Unit1.pas(23): Identifier redeclared: "a"
 [Error] Unit1.pas(23): "," or ":" expected but ";" found
 [Error] Unit1.pas(26): Type expected but "IMPLEMENTATION" found
 [Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"


Думаю delphi понимает (a) как перечислимый тип, а константа a уже объявлена.
Вот это выдаёт ту же ошибку.
const
a = 10;
var
 aa : (a,b);


 
Димон   (2005-03-10 10:58) [9]


>  [8] _silver ©   (10.03.05 10:53)


Как я уже говорил, я тоже думаю, что дельфи путает это с перечислимым типом. :(

Вопрос связан с 2005, т.к. там в области задания границ массивов другие глюки: в частности нельзя задавать нижние и верхние границы в виде контантных выражений. Т.е. так array: [a+1..a+22] of integer;
При том, что в каких то случая (в основном когда кода мало) это компилируется. В большом проекте нет. Смотрел и на кривой версии и на триале.

Собтсвенно вопрос риторический - забить на это и покупать 2005, или факт некорректной работы может послужить препятствием для покупки - мало ли еще сколько там глюков :(((


>  [7] Закулиса Мировая   (10.03.05 10:53)

хотел сказать, но не буду :) потрут еще ...


 
_silver ©   (2005-03-10 11:03) [10]

Димон   (10.03.05 10:58) [9]
Про глюки delphi2005 не раз писали.
Одним больше, одним меньше...
Я бы покупать не стал.
Поставил пиратскую версию, поигрался, снёс.
Буду ждать более стабильной версии.


 
Закулиса Мировая   (2005-03-10 11:06) [11]

Я просто действительно хочу узнать... или нет... я хочу, чтобы Вы привели пример кода, где использование массива, индексируемого не с нуля, размеры которого должны высчитываться на этапе компиляции от константы, причём заменить константу обычным числом прямо в коде, я#ляется жизненной необходимостью.

Что Вы сразу ложкой стучите? Я же Вам не предлагаю сбегать за верёвкой с мылом?


 
Димон   (2005-03-10 11:06) [12]


>  [10] _silver ©   (10.03.05 11:03)


и поставил, и поигрался, и снес уже :(((

Общее ощущение сырости присутствует. Сам понимаешь, что такая фигня, о которой я пишу, не особо критична, т.к. всегда можно выпутаться - преписать код иначе.

Но это наводит на мысль, а что если там еще много чего, причем такого, что не вылавливается на этапе компиляции :((

При том, что скомпилированный на 2005 проект в результате недельного тестирования глюков не выявил. Но все равно боязно.

Интересно было бы знать чей-нибудь опыт тестирования проектов, собранных на 2005. Нормально, работают?


 
Димон   (2005-03-10 11:08) [13]


>  [11] Закулиса Мировая   (10.03.05 11:06)

Ув.
Дело в том, что любой язык, представив свою грамматику, обязан ее выполнять. Все. К конкретным примерам это не имеет никоего отношения.


 
_silver ©   (2005-03-10 11:13) [14]

Димон   (10.03.05 11:06) [12]
Я компилировал 2 проекта на d2005, по 100тыс строк каждый. Оба откомпилировались успешно, но один запустился нормально, второй посыпал AV.
Почему так разбираться не стал, может у меня конечности кривые.
В d7 оба работают хорошо.


 
Димон   (2005-03-10 11:17) [15]


>  [14] _silver ©   (10.03.05 11:13)

попробуй скомпилиться в $R-
Я заметил, что дельфи 2005 более строг к range checking.
У тебя может где-то что-то случилось (например, в конструкторе), а где-то (например, в деструкторе) некорректно обработана ошибка.


 
Закулиса Мировая   (2005-03-10 11:18) [16]


>, обязан ее выполнять. Все. К
                     ^^^^^^^^^^


А вот в русском языке букву "ё" тоже пока никто не отменял. Почему же Вы ею  брезгуете?


 
Димон   (2005-03-10 11:20) [17]

а у меня такая на клавиатуре разве есть? Где? :)
Ув., вы первые начали неприятоности говорить:) Если вас раздражает мой  тон не терпяший возражений, то рядом полно топиков.
Если есть, что по сути - рад услышать :)


 
_silver ©   (2005-03-10 11:26) [18]

Димон   (10.03.05 11:17) [15]
Вполне возможно, но к d2005 я теперь, наверное, не скоро вернусь.


 
REA   (2005-03-10 13:21) [19]

В D7 тоже бывает, что глотает не совсем корректные конструкции.
(Например SomeFunction(Arg1,); - у этой функции один аргумент и запятая просто игнорируется). Еще что-то попадалось, но не помню что.


 
Игорь Шевченко ©   (2005-03-10 13:43) [20]


> Дело в том, что любой язык, представив свою грамматику,
> обязан ее выполнять


А ты ее читал, грамматику-то ? И в QC, кистате, писал, или только здесь жалобы на Борланд катишь ?


 
Димон   (2005-03-10 13:51) [21]


>  [20] Игорь Шевченко ©   (10.03.05 13:43)

Игорь. Буду крайне благодарен, если ты мне поможешь разобраться с qc. Как там искать заявлена ли ошибка или нет?

Грамматику я не читал, кроме того обрезка, который представлен в хелпе.
Я ты видел ее полностью? Рад был бы посмотреть:)


>  [19] REA   (10.03.05 13:21)
>Еще что-то попадалось, но не помню что.


Бывает без запятой между параметрами компилиться. 2005, кстати, все эти места радостно нашел.


 
Игорь Шевченко ©   (2005-03-10 14:43) [22]

Димон   (10.03.05 13:51) [21]

Просто опиши свою ситуацию. Искать наверное в категории Compiler, с указанием версии Delphi. Мне сейчас не удобно запускать QC, у меня он из среды запускался, а триал у нее кончился.


 
vuk ©   (2005-03-10 15:29) [23]

to Игорь Шевченко ©   (10.03.05 14:43) [22]:
>у меня он из среды запускался, а триал у нее кончился
Клиент QC - отдельная софтина, триал на нее не распространяется. У меня стоит в папке C:\Program Files\Borland\BDS\3.0\QualityCentral\

К тому же можно и через qc.borland.com работать.


 
имя   (2005-03-10 17:34) [24]

Удалено модератором


 
имя   (2005-03-10 17:48) [25]

Удалено модератором
Примечание: Дальше будет РО



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.026 c
4-1106050537
fafCracker
2005-01-18 15:15
2005.03.27
Помогите с Hook - убийцей мыши и клавы


14-1109939978
Sicilla
2005-03-04 15:39
2005.03.27
Adware


1-1110951712
ser35
2005-03-16 08:41
2005.03.27
Диапазон печати в QuickReport


1-1110874865
Гость
2005-03-15 11:21
2005.03.27
Как сделать, чтоб нельзя было "уйти" из формы без ее закрытия?


1-1111060983
Dr.Alex
2005-03-17 15:03
2005.03.27
Массивы.