Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 22 из 22 ПерваяПервая ... 12 20 21 22
Показано с 211 по 216 из 216
  1. #211
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

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

  2. #212
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Не уверен, но похоже что ложное срабатывание диагностики. Например вот так:

    1. #include <a_samp>
    2.  
    3. stock SomeFunction(str[] = "", const size = sizeof(str))
    4. {
    5. new len = strlen(str);
    6. if (len > 0)
    7. {
    8. strcat(str, "write to string array", size);
    9. }
    10. else
    11. {
    12. // some other logic
    13. }
    14. }
    15. main()
    16. {
    17. SomeFunction("");
    18. }


    Мы падаем в ветку else (т.к передана пустая строка). Там происходит какая-то логика. Но компилятор с нас просит const, хотя мы пишем в массив (если падаем в if ветку). Более "ходовой" пример с таким кодом можно глянуть в alternative dialogs, функция ShowPlayerAltDialog. С пустыми строками оно вызывается для закрытия диалога, как это можно сделать с ShowPlayerDialog.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Не уверен, но похоже что ложное срабатывание диагностики.
    Warning 239 выдаётся на 17-й строке из-за того, что в SomeFunction() передаётся строковый литерал.
    Если сделать так:
    1. static const empty_str[] = "";
    2. SomeFunction(empty_str);

    то никакого варнинга не будет.

    Впрочем, можно ещё сделать вот так:
    1. SomeFunction(_);

    Что по сути тоже является передачей строкового литерала (который, естественно, может оказаться модифицирован внутри функции, т.к. аргумент без const), но компилятор не предупредит об этом. Попробую сегодня сделать об этом issue в репо компилятора, а пока что делать так, как в последнем примере, не рекомендую.

    UPD: Это не баг, см. пост ниже.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Касаемо моего вчерашнего сообщения:
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Впрочем, можно ещё сделать вот так:
    1. SomeFunction(_);

    Что по сути тоже является передачей строкового литерала (который, естественно, может оказаться модифицирован внутри функции, т.к. аргумент без const), но компилятор не предупредит об этом. Попробую сегодня сделать об этом issue в репо компилятора, а пока что делать так, как в последнем примере, не рекомендую.
    Немного покопался в коде компилятора и, как оказалось это не баг: в таких случаях компилятор не передаёт ссылку на строку напрямую, а сначала создаёт в куче копию строки/массива по умолчанию и уже её передаёт - эту копию можно безопасно модифицировать внутри функции.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

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

    Скачать: 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

    Изменения с момента предыдущего релиза:
    • Диагностика warning 252 ("значение переменной изменено, но не используется") теперь работает для операторов ++, --, а также для составных операторов присвоения (+=, -=, *= и пр.)
      1. AddOne(arg) {
      2. // переменная увеличена на единицу ПОСЛЕ передачи её значения в return,
      3. // т.е. её новое значение после инкремента никак не используется
      4. // (возможно, автор кода вместо "arg++" хотел написать "++arg" ?)
      5. return arg++; // warning 252: variable has its value modified but never used: "arg"
      6. }


    • Диагностика warning 240 ("присвоенное значение не используется") теперь указывает на ту строку, на которой произошло предыдущее присвоение (которое не используется), а не текущее.
      1. var = 1; // теперь warning 240 выводится для этой строки
      2. // ...
      3. var = 2; // раньше предупреждение указывало на эту строку, а предыдущее
      4. // присвоение приходилось выискивать самостоятельно


    • Отменено введённое ранее требование на перечисление всех спецификаторов функции в последующих объявлениях и определении.
      Пример:
      1. forward public Func();
      2.  
      3. // В определении функции нет спецификатора "public", но компилятор не станет
      4. // считать это ошибкой, как было в предыдущем билде (05/2021).
      5. Func(){}

      Тем не менее, всё ещё нельзя присваивать спецификаторы static и public после того, как функция уже определена.
      1. Func()
      2. {
      3. // ...
      4. }
      5.  
      6. // Функция уже определена, нельзя добавить к ней спецификатор "static" или "public"
      7. forward public Func(); // error 025: function heading differs from prototype
      8.  
      9. // В то же время "stock" можно добавить даже после определения, т.к. он не влияет
      10. // на кодогенерацию и только подавляет предупреждение, если функция не используется
      11. forward stock Func(); // OK


    • Исправлено ложное срабатывание warning 240 в редких случаях, когда внутри цикла с помощью goto совершался переход на метку, объявленную далее внутри того же цикла (пример).

    • Исправлено падение компилятора, которое могло произойти из-за незавершённой конструкции do-while, в которой по ошибке забыто слово while.
      1. main()
      2. {
      3. do {} // В цикле не хватает "while", но вместо того, чтобы вывести ошибку
      4. // об отсутствии ключевого слова, компилятор просто падал.
      5. }


    • Исправлено игнорирование спецификации размера возвращаемого массива в объявлениях операторов.
      По правилам языка операторы не могут возвращать массивы, однако изначальный разработчик компилятора забыл добавить для этого соответствующую проверку.
      1. // теперь "[10]" в этом объявлении считается за ошибку,
      2. // как и должно было быть изначально
      3. native Tag:[10]operator+(Tag:a, Tag:b) = 0;


    • Обеспечена сборка со статической библиотекой времени выполнения.
      Это приведёт к увеличению размера файлов "pawncc.exe" и "pawnc.dll", однако теперь для работы компилятора не потребуется установка Visual C++ 2010 Runtime (нужные части библиотеки будут встроены в сам компилятор).
      В стоковом компиляторе (распространяемом вместе с релизами SA-MP) не нужно ничего дополнительно устанавливать, поэтому логично чтобы и здесь не было этого требования.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. 6 пользователя(ей) сказали cпасибо:
    DeimoS (13.08.2022) execution (14.08.2022) Leogin (13.08.2022) punkochel (01.12.2022) Saibot (15.08.2022) VVWVV (13.08.2022)
  7. #216
    Аватар для tify
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.08.2022
    Сообщений
    1
    Репутация:
    0 ±
    Я начал пользоваться оператором "__emit" и заметил отсутствие макро-инструкций "*ref.u.alt/pri".

    P.S. за статическую линковку VC++2010 отдельное спасибо.

 

 
Страница 22 из 22 ПерваяПервая ... 12 20 21 22

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

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

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

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

Ваши права

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