Как исправить Warning

Описание: Основы скриптинга
Модератор: SJplayer

SJplayer M
Автор темы, Модератор
Модератор
Аватара
SJplayer M
Автор темы, Модератор
Модератор
Сообщения: 196
Зарегистрирован: 25 мая 2013
С нами: 10 лет 10 месяцев

#1 SJplayer » 31 мая 2013, 10:11

Как исправить Warning

Значение Warning можно посмотреть .

warning 219 писал(а):warning 219: local variable "%s" shadows a variable at a preceding level

Это значит что переменная дважды объявлена. Пример:

Код: Выделить всё

new fast;
new fast;


Что делать?
1. мы можем одну из них удалить;
2. можем изменить;

Но не стоит забывать что при изменении переменной нам нужно заменить все что её касается. Пример правильного изменения:

Код: Выделить всё

new fast1;
fast1 = CreatePickup(1239, 2, 1380.3220,-1771.3235,13.5469);


warning 217 писал(а):warning 217: loose indentation

Это значит что код не табулирован (не построен лесенкой) Пример:

Код: Выделить всё

stock LSNews(color,const string[])
{
for(
new i = 0; i < MAX_PLAYERS; i++){
        if(IsPlayerConnected(i)){
if(!
lNews[i]){
  SendClientMessage(i, color, string);}}}


Пример правильного табулирования:

Код: Выделить всё

stock LSNews(color,const string[])
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            if(!lNews[i])
            {
                SendClientMessage(i, color, string);
            }
        }
    }
}


Можем выровнять все вручную или поставить:

Код: Выделить всё

#pragma tabsize 0      


или при помощи все исправить. pragma tabsize - просто маскирует эти warning и не более.

warning 235 писал(а):warning 235: public function lacks forward declaration %s

Это означает что у функции нет forward Например Вы создали паблик:

Код: Выделить всё

public lois()


И увас появляется этот варинг что же делать? Просто добавляем forward:

Код: Выделить всё

forward lois();


Если вы не хотите каждый раз писать forward то можно сделать так:

Код: Выделить всё

#define public:%1(%2) forward %1(%2);
public %1(%2)


И тогда новые паблики мы делаем так:

Код: Выделить всё

public:lois()


warning 216 писал(а):warning 216: nested comment ;

Вот так это выглядит:

Код: Выделить всё

/*case 58: //Fire&lvl


исправление:

Код: Выделить всё

case 58: //Fire&lvl      


warning 213 писал(а):warning 213: tag mismatch

Это означает не совпадения аргументов вот допустим самый простой случай:

Код: Выделить всё

#define CreateObject CreateDynamicObject
#define MoveObject MoveDynamicObject      


решение:

Код: Выделить всё

#define CreateObject, CreateDynamicObject
#define MoveObject,  MoveDynamicObject      


warning 201 писал(а):warning 201: redefinition of constant/macro

Двойное определение одинаковой константы define:

Код: Выделить всё

#define OnPlayerEnterRaceCheckpoint
#define OnPlayerEnterRaceCheckpoint      


исправление - одну удалить:

Код: Выделить всё

#define OnPlayerEnterRaceCheckpoint      


warning 200 писал(а):warning 200: symbol "%s" is truncated to 31 characters

Это обозначает что мы при создании переменной ввели больше 31 символа. Пример:

Код: Выделить всё

new sssssssssssssssssssssssssssssss;


Решение - сменить название или укоротить.

warning 202 писал(а):warning 202: number of arguments does not match definition

Это значит что у нас не совпадают аргументы. Возьмем самый простой пример:

Код: Выделить всё

Create3DTextLabel(" Текст .",0xFFA500FF,.0120,456.2717,35.1719,20.0);


Наша ошибка:

Код: Выделить всё

-2041.0120,456.2717,35.1719,20.0  
-2041.0120,456.2717,35.1719--------- это на ша координата (она нас не интересует)
20.0--------вот наша ошибка (20----это расстояние с которого наш текст будет виден)
а вот 0 это у нас testLOS- линия видимости


Нам 0 нужно заменить на 1

Код: Выделить всё

Create3DTextLabel(" Текст .",0xFFA500FF,1111.1111,111.1111,11.1111,20.1);


warning 203 писал(а):warning 203: symbol is never used: %s

Это означает что данный символ нигде не используется. Пример - создадим переменную:

Код: Выделить всё

new respon;


И тут у нас возникает вопрос?:

Код: Выделить всё

(2378) warning 203: symbol is never used: "respon"


Что же делать? Ответ прост - найти эту переменную и удалить.

warning 204 писал(а):warning 204: symbol is assigned a value that is never used %s

Это значит что создали переменную и массив, а он негде не используется:

Код: Выделить всё

new babai[15];


Решение - просто удалить.

warning 209 писал(а):warning 209: function "%s" should return a value

Это значит что наша функция не возвращается (простыми словами нет return 1; или return 0;). Пример:

Код: Выделить всё

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) 
{ 
   if 
(newkeys == 1024) 
   
{ 
   OnPlayerCommandText
(playerid,"/Blablabal"); 
   return 1
; <========Вот наш return  ДО
   
} 
}


Решение:

Код: Выделить всё

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
   if (newkeys == 1024)
   {
   OnPlayerCommandText(playerid,"/Blablabal");
   }
   return 1; <========Вот наш return ПОСЛЕ
}


Вернуться в «Основы скриптинга»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя