shape1
shape2
shape3
shape4
shape7
shape8

Использование #pragma


Статус
Закрыто для дальнейших ответов.

Dmitriy_Orell

алкоголик
Пользователь
12.04.2015
977
2
390
0
Что такое #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

 
Статус
Закрыто для дальнейших ответов.