Предупреждение "Приоритет константы завышен"
- Magic
- топ-софт
- Сообщения: 35
- Зарегистрирован: Вт, 20/11/2007 10:30
- Имя Фамилия: Роман Тищенко
- Откуда: Галактика-Украина
- Контактная информация:
Предупреждение "Приоритет константы завышен"
Получил при компиляции vip-файла предупреждение:
Предупреждение: ConstantPreference=On : Приоритет константы COBUHSCHET завышен
and coBuhSchet == AttrNam.WTable
^
Что означает это предупреждение?
Предупреждение: ConstantPreference=On : Приоритет константы COBUHSCHET завышен
and coBuhSchet == AttrNam.WTable
^
Что означает это предупреждение?
-
- топ-софт
- Сообщения: 566
- Зарегистрирован: Пт, 21/09/2007 15:19
- Имя Фамилия: Фёдор Терсин
- Откуда: Галактика Софт
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
Исчерпывающая информация на этот счёт ищется в документации по слову
ConstantPreference
- Magic
- топ-софт
- Сообщения: 35
- Зарегистрирован: Вт, 20/11/2007 10:30
- Имя Фамилия: Роман Тищенко
- Откуда: Галактика-Украина
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
В документации я уже искал.
Все, что удалось найти (В книге "Инструменты и утилиты"):
1.3. ПАРАМЕТРЫ КОМПИЛЯТОРА VIP
1.3.1. Секция [Compilers]: Настройки всех компиляторов
ConstantPreference
Тип
Да/Нет
Назначение
При поиске идентификаторов отдавать предпочтение константам
Синоним
/CP+
/CP-
Пример использования
ConstantPreference=off
/CP+
Соответственно, при помощи этого параметра я это предупреждение отключил.
Но вопрос звучал не "как его отключить?", а "что оно означает?".
В документации исчерпывающего ответа на это вопрос я не нашел.
Все, что удалось найти (В книге "Инструменты и утилиты"):
1.3. ПАРАМЕТРЫ КОМПИЛЯТОРА VIP
1.3.1. Секция [Compilers]: Настройки всех компиляторов
ConstantPreference
Тип
Да/Нет
Назначение
При поиске идентификаторов отдавать предпочтение константам
Синоним
/CP+
/CP-
Пример использования
ConstantPreference=off
/CP+
Соответственно, при помощи этого параметра я это предупреждение отключил.
Но вопрос звучал не "как его отключить?", а "что оно означает?".
В документации исчерпывающего ответа на это вопрос я не нашел.
- larin
- топ-софт
- Сообщения: 228
- Зарегистрирован: Пн, 10/09/2007 12:13
- Имя Фамилия: Михаил Ларин
- Откуда: ТопCофт
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
Вот такой текст есть в документе AtlDoc\asdk.chm
ConstantPreference=On : Приоритет константы <имя> завышен"
В версиях инструментария < 5.1.09 глобальные константы имели приоритет над локальными переменными и т.д. (см. 102.34648). Никакого предупреждения не выдавалось. В некоторых случаях это была причина ошибки (напр. vip\KATALOGS\CALENDAR\SPWORK.VIP(37) и т.д.), в других случаях такой порядок поиска необходим для правильной компиляции и работы (напр. vip\FIN\UTILS\DataCompress.vip(186) cPlat - и константа и поле таблицы). Идентификаторы окон и форматов также считаются константами.
Для совместимости временно добавлен параметр Compilers.ConstantPreference (включен по умолчанию) при включении которого, приоритет констант завышается и выдаётся предупреждение. От всех подобных предупреждений необходимо избавиться (напр. переименовать константу) и далее компилировать с выключенным параметром.
-
- заказчик
- Сообщения: 95
- Зарегистрирован: Чт, 25/09/2008 07:45
- Имя Фамилия: Марат Ахметзянов
- Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"
Re: Предупреждение "Приоритет константы завышен"
Тоже непонятно поведение. Объясните в чем криминал вот такой конструкции:
и при чем тут завышенный приоритет
А вообще, это баг: ПИР 101.44055, пока идет локализация
Кто все время правит мое сообщение? Пишите от себя пожалуйста, наберитесь мужества
Код: Выделить всё
coИмяТаблицы == Table1.wTableCode
А вообще, это баг: ПИР 101.44055, пока идет локализация
Кто все время правит мое сообщение? Пишите от себя пожалуйста, наберитесь мужества
Последний раз редактировалось stix Ср, 21/07/2010 10:22, всего редактировалось 4 раза.
- Magic
- топ-софт
- Сообщения: 35
- Зарегистрирован: Вт, 20/11/2007 10:30
- Имя Фамилия: Роман Тищенко
- Откуда: Галактика-Украина
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
Возможно с локализацией поможет такой небольшой пример.А вообще, это баг: ПИР 101.44055, пока идет локализация
Собираю интерфейс:
Код: Выделить всё
interface Exam0101 'Матценности';
create view
as select
*
from
KatMC,
AttrNam,
AttrVal
where((
coKatMC == AttrNam.WTable
and 'Доп.поле' == AttrNam.Name
and coKatMC == AttrVal.WTable
and KatMC.NRec == AttrVal.cRec
and AttrNam.NRec == AttrVal.cAttrNam
));
Browse B1;
fields
KatMC.Name 'Наименование': [40];
KatMC.BarKod 'Код': [35];
AttrVal.vString 'Доп.поле': [30];
end;
HandleEvent
cmInsertRecord:
insert current KatMC;
cmUpdateRecord:
update current KatMC;
cmDeleteRecord:
if Message('Вы уверены, что надо удалить запись ?',YesNo) = cmYes then
delete current KatMC;
end;
end.
Получаю следующие сообщения в логе:
Код: Выделить всё
Предупреждение: ConstantPreference=On : Приоритет константы COKATMC завышен (стр.11, поз.24 в E:\TestConst\vip\exam0101.vip)
coKatMC == AttrNam.WTable
^
Предупреждение: ConstantPreference=On : Приоритет константы COKATMC завышен (стр.13, поз.24 в E:\TestConst\vip\exam0101.vip)
and coKatMC == AttrVal.WTable
^
- Screw
- топ-софт
- Сообщения: 73
- Зарегистрирован: Пт, 14/09/2007 22:54
- Имя Фамилия: Виталий Корзюк
- Откуда: ТопСофт
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
Значение coXXXX для включенных в ЛТ таблиц компилятор генерирует автоматически. По всей видимости, среди включенных в проект файлов есть такой, в котором значение coXXXX определяется явным образом - оно и перекрывает значение сгенерированной.
- Magic
- топ-софт
- Сообщения: 35
- Зарегистрирован: Вт, 20/11/2007 10:30
- Имя Фамилия: Роман Тищенко
- Откуда: Галактика-Украина
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
Я включаю в проектный файл один инклуд файл - galnet.inc. Он, в свою очередь, включает coConst.inc, в котором и определена константа coKatMC:Screw писал(а):Значение coXXXX для включенных в ЛТ таблиц компилятор генерирует автоматически. По всей видимости, среди включенных в проект файлов есть такой, в котором значение coXXXX определяется явным образом - оно и перекрывает значение сгенерированной.
coKatMC = 1411;
Получается, для подавления этого предупреждения, разработчикам Галактики нужно убрать константы coXXXX из файла coConst.inc.
- larin
- топ-софт
- Сообщения: 228
- Зарегистрирован: Пн, 10/09/2007 12:13
- Имя Фамилия: Михаил Ларин
- Откуда: ТопCофт
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
Сборка Глалактики происходит со значением параметра ConstantPreference=off. Лучше когда локальные переменные имеют более высокий приоритет чем глобальные константы с тем же именем.
Рекомендую вам тоже поставить ConstantPreference=off.
Рекомендую вам тоже поставить ConstantPreference=off.
- Magic
- топ-софт
- Сообщения: 35
- Зарегистрирован: Вт, 20/11/2007 10:30
- Имя Фамилия: Роман Тищенко
- Откуда: Галактика-Украина
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
Этот параметр как раз и позволяет избежать перекрытия глобальных констант локальными.larin писал(а):Сборка Глалактики происходит со значением параметра ConstantPreference=off. Лучше когда локальные переменные имеют более высокий приоритет чем глобальные константы с тем же именем.
Рекомендую вам тоже поставить ConstantPreference=off.
Если он отключен повышается вероятность возникновения связанных с этим ошибок в коде.
Пока, конечно, компилируем свои проекты с ConstantPreference=off.
P.S. Судя по логам сборки исходников Галактики, предупреждения, возникающие при компиляции, похоже, мало кого из разработчиков волнуют. :)
Но это еще не повод поступать в собственных разработках так же.
-
- заказчик
- Сообщения: 95
- Зарегистрирован: Чт, 25/09/2008 07:45
- Имя Фамилия: Марат Ахметзянов
- Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"
Re: Предупреждение "Приоритет константы завышен"
все равно не понятно. Константы определены в файле galnet.inc. Больше никакого определения нет. Почему предупреждение то. Получается в любом случае этот параметр должен быть выключен, для чего он тогда вообще нужен и в чем его польза?
- larin
- топ-софт
- Сообщения: 228
- Зарегистрирован: Пн, 10/09/2007 12:13
- Имя Фамилия: Михаил Ларин
- Откуда: ТопCофт
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
Сейчас в этом параметре смысла наверно никакого нет.
На сколько я помню. В старых версиях компилятора 2 и 3 версии, этот код пытался бы найти 31415-й проект а не 10-й. Выше упомянутое сообщение имело смысл только при переходе на новую 5-ю версию компилятора. Чтобы найти вот такие коды, с вот такими конфликтами.
На 5-й верси компилятора уже все работают много лет, и смысла в этой диагностики уже дано нет. По этому рекомендую выключить параметр и не обращать на это сообщение внимания.
Код: Выделить всё
const
pi = 31415; // глобальная константа число ПИ
end;
interface projects;
const
pi = 10; // локальная константа интерфейса с другим смыслом (например сокращение от project index )
end;
procedure findProjectByIndex
{
find(pi)
}
end.
На 5-й верси компилятора уже все работают много лет, и смысла в этой диагностики уже дано нет. По этому рекомендую выключить параметр и не обращать на это сообщение внимания.
- larin
- топ-софт
- Сообщения: 228
- Зарегистрирован: Пн, 10/09/2007 12:13
- Имя Фамилия: Михаил Ларин
- Откуда: ТопCофт
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
Вот тутstix писал(а):все равно не понятно. Константы определены в файле galnet.inc. Больше никакого определения нет. Почему предупреждение то. Получается в любом случае этот параметр должен быть выключен, для чего он тогда вообще нужен и в чем его польза?
Код: Выделить всё
create view
as select
*
from
KatMC,
AttrNam,
AttrVal
where((
coKatMC == AttrNam.WTable
and 'Доп.поле' == AttrNam.Name
and coKatMC == AttrVal.WTable
and KatMC.NRec == AttrVal.cRec
and AttrNam.NRec == AttrVal.cAttrNam
));
т.е. не явно создается локальная константа coKatMCЗначение coXXXX для включенных в ЛТ таблиц компилятор генерирует автоматически.
-
- заказчик
- Сообщения: 95
- Зарегистрирован: Чт, 25/09/2008 07:45
- Имя Фамилия: Марат Ахметзянов
- Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"
Re: Предупреждение "Приоритет константы завышен"
если автоматически зачем тогда galnet.inc?
- larin
- топ-софт
- Сообщения: 228
- Зарегистрирован: Пн, 10/09/2007 12:13
- Имя Фамилия: Михаил Ларин
- Откуда: ТопCофт
- Контактная информация:
Re: Предупреждение "Приоритет константы завышен"
А компилятор "умеет" автоматически определять константы далеко не везде. Помню что coXXXX внутри create view, cmXXX внутри screen buttons.
А например здесь не умеет:
Выдаст
А например здесь не умеет:
Код: Выделить всё
Delete RefTable Where (( cgReg_Main == RefTable.wAccount
and cgSel_TxoOborotClass == RefTable.wMain
and wListSour == RefTable.wSub
and coHozObor == RefTable.wTable1
and _cRec == RefTable.cRecord1
and coClassSeg == RefTable.wTable2));
Так что без coXXXX не обойтись.Ошибка: Нет такой функции, поля или метода : COCLASSSEG D:\gal\G810\src\CompSrc\F\F_TXO\Vip\GetHozOper.vip(стр. 931, поз. 47)