const关键字可用于声明全局常量或局部常量:点击查看常量指南
用常量代替魔数(数值字面量),可提高代码可读性和可维护性。
用常量代替变量,避免根据地址查找数值,可提高代码效率。
const可与new、public、static、stock组合使用,为非参数变量添加只读特性:点击查看变量指南
const可为参数变量添加只读特性:点击查看参数指南
为变量添加只读特性,可禁止用户使用运算符修改变量值,提高代码可读性。
#include <amxmodx>
// 声明全局常量
const MAX_PLAYERS = 32;
// 为插件私有变量添加只读特性
new const MaxClients;
// 为假公共备用变量添加只读特性
public stock const Float:V3_Zero[3];
// 为文件私有备用变量添加只读特性
static stock const Float:V3_X[3], Float:V3_Y[3], Float:V3_Z[3];
SetVariable(
const &any:variable, // 为传引用的参数添加只读特性
any:newValue
)
{
const VAR_ARG_INDEX = 0; // 声明局部常量
const VAR_ELEMENT_INDEX = 0; // 声明局部常量
setarg(VAR_ARG_INDEX, VAR_ELEMENT_INDEX, newValue);
}
SetArray(
const any:array[], // 为传引用的参数添加只读特性
const any:... // 为传引用的可变参数添加只读特性
)
{
new cellCount = numargs() - 1;
if (cellCount < 1) return;
new addr = get_var_addr(array);
const CELL_SIZE = 4; // 声明局部常量
for (new cellId; cellId < cellCount; cellId++)
set_addr_val(addr + cellId * CELL_SIZE, getarg(1 + cellId));
}
public plugin_precache()
{
SetVariable(MaxClients, get_maxplayers());
SetArray(V3_X, 1.0, 0.0, 0.0);
SetArray(V3_Y, 0.0, 1.0, 0.0);
SetArray(V3_Z, 0.0, 0.0, 1.0);
server_print("[AMXX]MaxClients: %d", MaxClients);
server_print("[AMXX]V3_X: %.f %.f %.f", V3_X[0], V3_X[1], V3_X[2]);
server_print("[AMXX]V3_Y: %.f %.f %.f", V3_Y[0], V3_Y[1], V3_Y[2]);
server_print("[AMXX]V3_Z: %.f %.f %.f", V3_Z[0], V3_Z[1], V3_Z[2]);
}