Я понял тебя) Т.е. в энуме константы идут в порядке возрастания, а с разными тэгами возрастание невозможно (например сначала идет константа с тэгом Float: и со значение 1.2, а потом пустая с тэгом _:, и по сути константа-переменная должна хранить 2.2, но переменные не могут хранить плавающие значения).
Последний раз редактировалось SteveStage; 09.02.2020 в 13:59.
Забыл упомянуть в предыдущем посте с релизом: начиная с версии 3.10.10 требуется использовать модифицированные инклуды SA-MP (со стандартными будет куча новых warning 239 при использовании функций SA-MP, т.к. в них не исправлены проблемы с const-корректностью).
Для этого перейдите по этой ссылке, в правом верхнем углу нажмите зелёную кнопку "Clone or download", затем в открывшемся меню "Download ZIP", после чего из скачавшегося ZIP-архива скопируйте инклуды в папку "pawno/include".
Тем временем, как и было обещано, я подготовил неофициальный билд, в который добавил пару-тройку фич, которые почему-то не были рассмотрены перед подготовкой релиза 3.10.10.
Изменения (в сравнении с официальным билдом 3.10.10):
- Добавлена диагностика для обнаружения использования неинициализированных переменных (warning 210).
- Устранён недочёт с отсутствием проверки на несовпадение тегов между выражениями в switch и case.
- (NEW) Добавлены/улучшены диагностики для обнаружения неиспользуемых присвоений к переменным:
- Улучшена работа warning 204 (выдаётся, когда переменной присвоено значение, но оно не используется), теперь она работает в большем количестве случаев.
Пример работы:
main() { new n = 1; // Присвоим переменной "n" новое значение, но оставим его неиспользованным. // По идее это лишний код, но раньше компилятор не замечал его (потому что // переменная была использована в 'printf()'), теперь же он выдаёт предупреждение. n = 2; // warning 204: symbol is assigned a value that is never used: "n" }- Добавлена диагностика warning 240 (предыдущее значение, присвоенное к переменной, не было использовано).
Пример работы:
main() { new n = 1; // Присвоим переменной новое значение, при этом прежнее ("1") не будет использовано. // Это тоже лишний код, но не совсем такой, как в warning 204 (т.к. неиспользованным // остаётся не текущее значение переменной, а предыдущее), потому новый warning. n = 2; // warning 240: previously assigned value is never used (symbol "x") }
Скачать: https://www.dropbox.com/s/v5gvuwi0s2...0.10x.zip?dl=1
Исходный код: https://github.com/Daniel-Cortez/paw...e/master-fixes
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Либо твой форк немного сыроват, либо мои руки не готовы к нему :)
warning 240: previously assigned value is never used (symbol "tmpobjid")
Выдает на все строки кода маппинга, где tmpobjid = CreateDynamicObject. Логика компилятора понятна, но, увы, ложная. Ибо даже убрав "tmpobjid =", компилятор все еще видит ошибку. Маппинг - pastebin(в этом варианте я убрал лишние присвоения, но компилятор все равно орет)
Компилятор так же сообщил мне, что существуют ошибки в инклудах YSI:
Предполагаю, что версия библиотеки устарела, ибо временно компилирую без sampctl, но этот вариант чуть позже проверю.
Последний раз редактировалось Pa4enka; 12.02.2020 в 02:55.
Блин, а почему #pragma once не приняли? Есть на это какие-то причины?
Пробовал скомпилировать вот так:
Ни на 4-й, ни на 5-й версии YSI не было никаких варнингов касаемо tmpobjid. Я что-то делаю не так?
Насчёт варнингов в YSI - давно известная проблема, ибо там во многих местах используют "new idx;" вместо "new idx = 0;". По-хорошему, есть смысл исправить это в самой библиотеке, но я ей не пользуюсь, и поэтому не могу знать обо всех местах, где выдаётся warning 210.
Пока что в качестве обходного пути могу только предложить временно отключить варнинг перед подключением инклудов из YSI (в теме про warning 210 написано, как это сделать).
И да, на счёт варнингов в codescan.inc интересно, я не смог их воспроизвести у себя. Можешь где-нибудь выложить ту версию инклуда, которая у тебя (он должен быть в папке "amx_assembly")?
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
На маппинг компилятор ругался из-за того, что файл был продублирован в нескольких местах. Хотя я вчера и сверял путь несколько раз , но видимо из-за усталости не заметил отличий. В общем, ложная тревога, извини.
YSI апдейтнул до последней версии с официального гитхаба и те ошибки с несовпадением тегов пропали, но как только я возвращаю обратно старую версию - варнинги появляются.
Посмотреть файл
Ругается на switch внутри функции "CodeScanRun", конкретно "case -1" и "case 0".
Файл находится в папке "amx".
Версия YSI: 4.0.0 либо 4.0.1
Вот так вот выдает warning 213. Это баг?
#if !defined MAX_TEST_TEXT_DRAW const MAX_TEST_TEXT_DRAW = 64; #endif enum { ITEM_FIRST, ITEM_SECOND } new Text: g_test_textdraw[MAX_TEST_TEXT_DRAW]; main() { }
Но если же попробовать выводить значение через printf, то варнинга не будет. Как я понимаю, ошибка где-то в определении тэгов? Т.е: вот так вот нет варнинга:
#if !defined MAX_TEST_TEXT_DRAW const MAX_TEST_TEXT_DRAW = 64; #endif enum { ITEM_FIRST, ITEM_SECOND } new Text: g_test_textdraw[MAX_TEST_TEXT_DRAW]; main() { ITEM_FIRST, g_test_textdraw[ITEM_FIRST] ); }
P.S: Pawn compiler 3.10.10
Последний раз редактировалось tnc; 16.04.2020 в 06:25.
Daniel_Cortez (16.04.2020)
Эту тему просматривают: 5 (пользователей: 0 , гостей: 5)