Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 17 из 22 ПерваяПервая ... 7 15 16 17 18 19 ... ПоследняяПоследняя
Показано с 161 по 170 из 216
  1. #161
    Аватар для arcttic
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.05.2018
    Сообщений
    9
    Репутация:
    0 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Что это такое и как это связано с темой обсуждения (компилятор)?
    Связан с варнингом const корректности

    PHP код:
    warning 239literal array/string passed to a non-const parameter 

  2. #162
    Аватар для tnc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.09.2019
    Сообщений
    121
    Репутация:
    26 ±
    Цитата Сообщение от arcttic Посмотреть сообщение
    Связан с варнингом const корректности

    PHP код:
    warning 239literal array/string passed to a non-const parameter 
    Ну так поправьте.

  3. #163
    Аватар для arcttic
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.05.2018
    Сообщений
    9
    Репутация:
    0 ±
    Цитата Сообщение от tnc Посмотреть сообщение
    Ну так поправьте.
    Я и обратился вопросом по данной версии компилятора, хотел бы узнать, что можно сделать...

  4. #164
    Аватар для Fallen A.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Адрес
    Минск, БССР
    Сообщений
    236
    Репутация:
    19 ±
    Всегда присваивал значение ячейке массива с помощью встроенной функции, если это касалось string значения. Что не так я делаю?

  5. #165
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. #166
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    "Неофициальный" релиз 3.10.10+ от 31.06.2020.

    Скачать: https://www.dropbox.com/s/v5gvuwi0s2...0.10x.zip?dl=1
    Исходный код: https://github.com/Daniel-Cortez/paw...e/master-fixes

    В данном билде вы можете ознакомиться как с улучшениями для уже представленных ранее варнингов (204, 240), так и с новыми диагностиками, которые могут помочь в нахождении скрытых ошибок в вашем коде:
    • (FIX) Исправлен баг, из-за которого элементы перечислений при использовании в качестве индекса элемента массива замещали своим тегом тег ячейки массива (отдельное спасибо пользователю tnc за то, что сообщил об этом баге).

    • (FIX) Для варнингов 204 и 240 (неиспользуемые присвоения к переменным) реализован гораздо более изощрённый механизм отслеживания присвоений, благодаря чему компилятор теперь умеет находить неиспользуемый код в более сложных случаях.

    • (NEW) warning 241: negative or too big shift count - отрицательный или слишком большой счётчик битового сдвига.
      Теперь если счётчик битового сдвига (2-й операнд в операциях "<<", ">>" и ">>>") отрицательный или больше 31, такая операция сдвига считается подозрительной, т.к. в ячейке всего 32 бита.
      Эта диагностика может быть особенно полезна, если пользователь пытается уместить слишком много битовых флагов в одной переменной.
      1. enum ePlayerFlags
      2. {
      3. pfEmailConfirmed, // 0
      4. pfTutorialCompleted, // 1
      5. /* ... */ // ...
      6. pfImprisoned, // 31
      7. pfHospitalized // 32, флаг не сохранится, т.к. при сдвиге на 32 позиции влево
      8. // он окажется "вытолкнут" из ячейки (переполнение)
      9. };
      10.  
      11. // ...
      12.  
      13. player_info[playerid][pFlags] |= (1 << pfHospitalized); // warning 24X: negative or too big shift count

    • (NEW) warning 242: shift overflow in enum item declaration (symbol "%s") - переполнение при левом сдвиге в объявлении одного из членов перечисления.
      Тоже выявляет случаи, когда пользователь объявил слишком много битовых флагов, но только в самих перечислениях, если пользователь указал в качестве инкремента левый битовый сдвиг.
      1. enum ePlayerFlags (<<= 1)
      2. {
      3. /* 1 << 0 */ pfEmailConfirmed = 1,
      4. /* 1 << 1 */ pfTutorialCompleted,
      5. /* ... */
      6. /* 1 << 31 */ pfImprisoned,
      7. /* 1 << 32 */ pfHospitalized // переполнение
      8. };

      В приведённом выше примере значение константы pfHospitalized на самом деле рассчитывается не как (1 << 32), а как (pfImprisoned << 1) (т.е. на основе значения предыдущего члена перечисления), поэтому в таком случае предупреждение о неправильном счётчике сдвига (warning 241) было бы неверным, т.к. у счётчика на самом деле правильное значение (1). Тем не менее, при расчёте значения константы происходит переполнение, поэтому для таких случаев и был сделан отдельный варнинг.

    • (NEW) warning 243: redundant code: switch control expression is constant - излишний код: контрольное выражение внутри switch является константным.
      Подобные варнинги уже действуют при использовании константы или константного выражения в if, while, do-while и for ("redundant code: constant expression is zero", "redundant test: constant expression is non-zero"), поэтому логично иметь подобного рода диагностику и для switch.
      На данный момент мне известно только об одном ложном срабатывании в инклудах amx_assembly, просьба о нём не сообщать! Насколько я понимаю, это особый случай нестандартного использования switch (самомодифицирующийся код?), и я предложу в репозиторий amx_assembly исправление, как только варнинг примут в состав компилятора.

    • (NEW) warning 244: enum item "%s" not handled in switch - для одного или нескольких членов перечисления не предусмотрен(ы) case внутри switch, а также нет ветки default.
      1. enum EFamily
      2. {
      3. FAM_GROVE,
      4. FAM_BALLAS,
      5. FAM_VAGOS,
      6. FAM_AZTECAS
      7. };
      8.  
      9. stock GetFamilyColor(EFamily:family)
      10. {
      11. switch (family)
      12. {
      13. // ПРИМЕЧАНИЕ: пользователь забыл добавить case для FAM_AZTECAS
      14. case FAM_GROVE: return COLOR_GREEN;
      15. case FAM_BALLAS: return COLOR_PURPLE;
      16. case FAM_VAGOS: return COLOR_YELLOW;
      17. } // warning 244: enum item "FAM_AZTECAS" not handled in switch
      18.  
      19. return COLOR_GREY;
      20. }


    P.S.: Не стесняйтесь сообщать сюда о ложных срабатываниях варнингов, если таковые вдруг будут, либо же просто отписываться об интересных скрытых недочётах, которые вы смогли найти благодаря новым диагностикам, ибо лишняя аргументация за принятие варнингов в состав компилятора точно не помешает :)
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. 4 пользователя(ей) сказали cпасибо:
    DeimoS (01.07.2020) execution (01.07.2020) oukibt (01.07.2020) tnc (01.07.2020)
  8. #167
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Как минимум, 213-ое предупреждение для switch крайне полезным оказалось, так что советую всем с этим компилятором свои скрипты проверить.

    Сейчас скинули мод вместе с заказом и там была система прикрепления объектов к скинам с разными координатами для разных ID. И было такое перечисление:
    Код:
    switch(skin)
    {
    	/*прочие case*/
    	case 9,11,12,13,40.41,55,56,63,64,65,69,75,76,85,89,90,91,92,93,131,138,139,140,141,145.148,150,151,152,157,169,172,178,190,191,192,193,194,198,201,209,210,211,214,215,216,219,224.225,226,229,230,233,237,238,244,246,251,256,257,263,306,307,308,309: /*прикрепление объекта*/
    	/*прочие case*/
    }
    Собственно, обычный компилятор такой код пропустит без проблем. Но если внимательно присмотреться, в нескольких местех вместо запятой стоит точка.
    1. switch(skin)
    2. {
    3. /*прочие case*/
    4. case 9,11,12,13,40.41,55,56,63,64,65,69,75,76,85,89,90,91,92,93,131,138,139,140,141,145.148,150,151,152,157,169,172,178,190,191,192,193,194,198,201,209,210,211,214,215,216,219,224.225,226,229,230,233,237,238,244,246,251,256,257,263,306,307,308,309: /*прикрепление объекта*/
    5. /*прочие case*/
    6. }


    Соответственно, ни о какой правильной работоспособности и речи тут не идёт. И глазом такую ошибку не с первого раза обнаружишь.
    Последний раз редактировалось DeimoS; 02.07.2020 в 21:24.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. Пользователь сказал cпасибо:
    execution (02.07.2020)
  10. #168
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    "Неофициальный" релиз 3.10.10+ от 02.07.2020 (hotfix).

    В данном релизе исправлены ложные срабатывания варнингов 204 и 240, при которых выводились случайные (неправильные) номера строк, например:
    1. pawno\include\functions.inc(758132272) : warning 204: symbol is assigned a value that is never used: "playerid"

    Если с предыдущим билдом от 30.06.2020 у вас были подобные сообщения - крайне рекомендуется использовать этот билд.

    Скачать: https://www.dropbox.com/s/v5gvuwi0s2...0.10x.zip?dl=1
    Модифицированные инклуды SA-MP: https://github.com/pawn-lang/samp-st...3.7-R2-1-1.zip
    Исходный код: https://github.com/Daniel-Cortez/paw...e/master-fixes

    Полный список изменений (с момента предыдущего билда от 30.06.2020):
    • Исправлен баг с локальными константами, продолжающими существовать после окончания локального блока, внутри которого они были объявлены.
      1. main()
      2. {
      3. if (/* ... */)
      4. {
      5. const CONSTVAL = 0;
      6. }
      7. return CONSTVAL; // Из-за бага такой код компилировался, хотя по идее константа CONSTVAL
      8. // должна была перестать существовать после окончания блока "if".
      9. }

    • Исправлены ложные срабатывания варнингов 204 и 240 в случаях, когда внутри if или switch объявлена локальная константа (отдельное спасибо DeimoS'у за то, что сообщил о проблеме).
      Причиной оказался упомянутый пунктом выше баг с областью существования констант, из-за которого ломался алгоритм отслеживания присвоений.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  11. 2 пользователя(ей) сказали cпасибо:
    DeimoS (02.07.2020) Disinterpreter (03.07.2020)
  12. #169
    Аватар для nekaz
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.02.2014
    Сообщений
    19
    Репутация:
    0 ±
    Кхм, использую последний релиз компилятора, получаю 239 варинг, при использовании диалога. Собственно скрин варинга - https://prnt.sc/te6t10
    скрин диалога - https://prnt.sc/te6tp8

    UPD: на все функции которые содержат "text[]" и т.д. получаем 239 вар, закрадываются сомнение в правильном работоспособности, ибо это ж дефолтные функции, теперь необходимо к каждой функции дописывать const....

  13. #170
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от nekaz Посмотреть сообщение
    Кхм, использую последний релиз компилятора, получаю 239 варинг, при использовании диалога. Собственно скрин варинга - https://prnt.sc/te6t10
    скрин диалога - https://prnt.sc/te6tp8

    UPD: на все функции которые содержат "text[]" и т.д. получаем 239 вар, закрадываются сомнение в правильном работоспособности, ибо это ж дефолтные функции, теперь необходимо к каждой функции дописывать const....
    Начиная с версии 3.10.10 с компилятором требуется использовать модифицированные инклуды SA-MP, в которых исправлена проблема с const-корректностью и множество других недочётов.
    Подробнее о const-корректности: https://pro-pawn.ru/showthread.php?16434
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 
Страница 17 из 22 ПерваяПервая ... 7 15 16 17 18 19 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •