Что такое #pragma ?
На самом деле #pragma используется для изменения настроек компилятора, эта директива не как не устраняет ошибки или предупреждения отправляемые компилятором. С помощью директивы #pragma вы можете только скрыть некоторые предупреждения и ошибки, на самом деле проблемы останутся в вашем коде, и не исчезнут волшебным способом.#pragma dynamic
Самая популярная из всех существующих.
#pragma dynamic 1000000
Динамически устанавливает параметр размера стека.
Иногда вы можете получить при компилировании своего скрипта такое уведомление:
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
Header size: 19036 bytes
Code size: 1327124 bytes
Data size: 43915204 bytes
Stack/heap size: 16384 bytes; estimated max. usage: unknown, due to recursion
Total requirements:45277748 bytes
Это предупреждение связано с редкими массивами, ненужных размеров и строк с использованием большого объема данных.
Например вы выделяете под стринговую область 2000 ячеек, а вам нужно всего 256:
Пример не правильного использования области памяти.
new string[2024];
format(string,sizeof(string),"%s, игрок зашел на сервер. По-приветствуем игрока.", GetPlayerNameEx(playerid));
Пример правильного использования.
new string[50+MAX_PLAYER_NAME+1];
format(string,sizeof(string),"%s, игрок зашел на сервер. По-приветствуем игрока.", GetPlayerNameEx(playerid));
Так же рассмотрим пример с большим не нужным выделением слотов в массиве.
Пример не правильного использования
#define MAX_CARS 1000
#define MAX_CAR_ITEMS 100
new CarItem[MAX_CARS][MAX_CAR_ITEMS][CAR_ITEM_DATA];
Спросите себя: Действительно ли вы должны использовать все это пространство?
Этот массив примерно 400 килобайт, не включая данные счетчиков.
Это очень много по сравнению с сегодняшним меркам, конечно все это можно сократить в 10 или даже 50 раз.
Пример правильно использования.
#define MAX_CARS 1000
new CarItem[MAX_CARS * 40][CAR_ITEM_DATA];
Размер этого массива теперь 40 килобайт, в отличие от 400 килобайт другого массива.
1 ячейка - 4 байта.
#pragma tabsize
Так же самая популярная директива среди рлсбыдлокдеров
Она отвечает за размер табуляции в вашем скрипте, который устанавливается по умолчанию до 4.
Если вы устанавливаете этот параметр до нуля в основном вы можете писать не читаемый код.
Вы вообще не должны изменять размер табуляции, установленный по умолчанию.
Чтобы избежать ошибок связанных с табуляцией вам нужно научиться делать правильно отступы в вашем коде.
Пример плохой табуляции.
Dialog:ElectricRadio(playerid, response, listitem, inputtext[])
{
if (response)
{
new vehicleid = GetPlayerVehicleID(playerid);
if (GetPlayerState(playerid) != PLAYER_STATE_DRIVER || !IsEngineVehicle(vehicleid))
return 0;
switch (listitem)
{
case 0: SetVehicleRadio(vehicleid, "https://72.13.83.151/");
case 1: SetVehicleRadio(vehicleid, "https://173.192.207.51:8062/");
case 2: SetVehicleRadio(vehicleid, "https://212.83.60.202:8000/");
}
}
return 1;
}
Пример правильной табуляции
Dialog:ElectricRadio(playerid, response, listitem, inputtext[])
{
if (response)
{
new vehicleid = GetPlayerVehicleID(playerid);
if (GetPlayerState(playerid) != PLAYER_STATE_DRIVER || !IsEngineVehicle(vehicleid))
return 0;
switch (listitem)
{
case 0:
SetVehicleRadio(vehicleid, "https://72.13.83.151/");
case 1:
SetVehicleRadio(vehicleid, "https://173.192.207.51:8062/");
case 2:
SetVehicleRadio(vehicleid, "https://212.83.60.202:8000/");
}
}
return 1;
}
Вывод
Не используйте #pragma для исправления предупреждений и ошибок компилятора.
Автор: makarov