3.2.5:new static stock const静态备用常量,new public stock const公共备用常量
new 说明符2 说明符3 说明符4 标签 符号名称 维度列表 初始化表达式;
参考:
new static stock const bool: customSymbol [2][2][2][2] =true;
new
说明符用于声明自定义符号(变量).
在函数体外,new
可以与public static stock const
说明符同时存在.
在函数体内,new
可以与const
说明符同时存在.
new
是1号位的说明符,不论在函数体内还是体外,都必须写在左边第1位.
new
说明符有以下特性:
相对其它说明符,new
的第3个特性是独一无二的.
作为1号位的说明符,new
的特性拥有最高优先级.
使用多个说明符时,若某些特性有冲突,以高优先级的为主.
new
说明符可以写在函数体内或体外.用于声明自定义符号(变量).
在函数体外声明的符号被称为"全局变量".可在下方任意函数体内被调用.
在函数体内声明的符号被称为"局部变量".仅能在当前代码块,与其内层代码块中被调用.
说明符2是可省略的.
在函数体外,说明符2可以是public static
之一.在函数体内则不允许.
若填写public
,则自定义符号可以被其他插件访问.
AMXX1.8.3以下版本中,拥有public
说明符的自定义符号不能是数组.
若填写static
,则自定义符号仅能在当前文件中被访问.当前插件的其它文件不能访问它.
说明符3是可省略的.
说明符3只能写stock
,这是唯一的3号位说明符.
若填写stock
,编译器不会警告符号(变量)未被调用.
若符号(变量)未被调用,则编译时,不会将符号(变量)写入amxx文件,不会占用内存空间.
说明符4是可省略的.
说明符4可以写const
.表示声明的自定义符号只能被初始化表达式设置默认值.接下来的代码中不能被任何运算符更改.
标签是可省略的.
声明每个自定义符号都可在左边填写标签.表示该符号的运算方式或用途.
若省略标签,则默认该符号使用 _: 标签.
符号名称是自定义的,命名时应遵守符号命名规则.
在AMXX1.8.3以下版本中,符号名称不得超过31个字符.
在AMXX1.8.2以上版本中,符号名称不得超过63个字符.
名称的第一个字符必须是"_ @ a至z A至Z"这四者之一.
名称的剩余字符必须是"_ @ a至z A至Z 0至9"这五者之一.
通常根据用途,给符号设定相关的英文名.
不得与保留词或用户声明的其它符号重名.
维度列表是可省略的.
声明每个自定义符号都可在右边填写维度列表(方括号).表示该符号的数据结构.
若省略维度列表,则默认该符号仅能储存1个数值.
在AMXX1.10.0以下版本中,一个符号仅允许0至3对方括号,在AMXX1.9.0以上版本中,一个符号允许有0至4对方括号.
拥有维度列表的符号被称为数组.假设符号A拥有4对方括号,那么A是4维数组.
4维数组内存放的是3维数组,3维数组内存放的是2维数组,2维数组内存放的是1维数组,1维数组内存放的是数值.
数组内存放的对象被称作元素.而方括号内填写的数值则是表示数组的尺寸,或容量,或元素数量.
假设A的维度列表是[2][3][4][5]
,那么A的元素数量是2,
A的每个元素都是3维数组,每个3维数组的元素数量都是3,
3维数组的每个元素都是2维数组,每个2维数组的元素数量都是4,
2维数组的每个元素都是1维数组,每个1维数组的元素数量都是5,
1维数组的每个元素都是数值,因此每个1维数组都拥有5个数值.
方括号中的数值必须是字面量或无地址的常量,像new
声明的有地址符号是不允许填入维度列表的.
方括号中的数值是可省略的.省略时,编译器会根据初始化表达式决定具体数量(这种情况下不允许省略初始化表达式).
初始化表达式是可省略的.
声明每个自定义符号都可以在其维度列表右边(若没有就在符号名称右边)填写初始化表达式(以 =
符号开头的赋值表达式).
表示该符号的默认值.
若被声明的符号是数组,应赋值为字符串或数组字面量.否则应赋值为单个数值字面量.
若省略初始化表达式,则该符号的默认值为0.
初始化表达式可以用 ,
符号结尾.表示接下来还要以相同的说明符继续声明自定义符号.
也可以用 ;
符号结尾,表示停止继续声明自定义符号.
通常情况下是可以省略 ;
符号的.但在检查分号模式下不允许省略 ;
符号.
// 最普通的声明方式(未填写初始化表达式,因此变量的值为0)
new gVariable1;
// 连续声明多个变量,并初始化
new gVariable2 = 2, gVariable3 = 3, gVariable4 = 100;
// 声明带有标签的变量
new bool:gVariable5 = true, Float:gVariable6 = 222.0;
// 声明拥有维度列表的变量,这是尺寸为4的1维数组,拥有4个值为0的元素
new gVariable7[4];
// 声明尺寸由初始化表达式决定的1维数组变量,拥有4个元素,因此尺寸为4
new gVariable8[] = { 1, 2, 3, 4 };
// 声明尺寸为5的3维数组变量,并设定其内2维数组的尺寸为2,1维数组的尺寸为3
new Float:gVariable9[5][2][3] =
{
{
{ 1.0, 2.0, 3.0 },
{ 4.0, 5.0, 6.0 },
},
{
{ 7.0, 8.0, 9.0 },
{ 10.0, 11.0, 12.0 },
},
{
{ 13.0, 14.0, 15.0 },
{ 16.0, 17.0, 18.0 },
},
{
{ 19.0, 20.0, 21.0 },
{ 22.0, 23.0, 24.0 },
},
{
{ 25.0, 26.0, 27.0 },
{ 28.0, 29.0, 30.0 },
}
};
// 在函数体内,声明变量,并使用运行时表达式作为变量的初始化表达式
#include amxmodx
public plugin_init()
{
new variable1 = random(5); // 函数只能在游戏运行时才能运行,编译时无法确认具体的值
new Float:variable2 = 10.0 + 20.0; // 浮点数的大部分运算符都是函数
}
同时使用new const
,则声明的符号是有地址的常量.
去除const
的特性:
"不能连续声明常量",
"声明的常量不能是数组",
"声明的常量必须初始化",
"声明的常量不能用作引用参数".
保留const
的特性:
"声明的常量不能被运算符更改".
// 声明一个有地址的常量,不能被运算符更改.
new const gConstant = 222;
同时使用new stock
,则声明的符号是备用变量.
去除stock
的特性:
未知.
保留stock
的特性:
"说明符仅允许在函数体外使用",
"不警告符号未被使用,不将未被使用的符号编译到amxx文件".
目前看来,同时使用new stock
与单独使用stock
没什么不同.
new
说明符允许将运行时表达式用作变量的初始化表达式.
但在函数体外无法表现出这个特性.AMXX不支持在函数体外运行函数.
因此,目前看来,同时使用new stock
并没有什么用处.
// 声明一个备用变量,接下来的代码中并未调用它,则不被写入amxx文件,因此不会触发警告:"gStock符号从未被使用"
new stock gStock = 222;
同时使用new static
,则声明的符号是静态变量.
去除static
的特性:
"可声明函数或变量".
保留static
的特性:
"被声明的函数或全局变量,仅当前文件可访问.其它文件,插件,模块都无法访问",
"被声明的局部变量,不会被销毁.因此,下次进入代码块,依然能访问变量最后一次储存的值".
在函数体内,不允许符号同时拥有new static
说明符.
在函数体外,目前看来,同时使用new static
与单独使用static
没什么不同.
new
说明符允许将运行时表达式用作变量的初始化表达式.
但在函数体外无法表现出这个特性.AMXX不支持在函数体外运行函数.
因此,目前看来,同时使用new static
并没有什么用处.
// 声明一个静态变量,仅当前文件可以访问它
new static gStatic = 222;
同时使用new public
,则声明的符号是公共变量.
去除public
的特性:
"可声明函数或变量".
保留public
的特性:
"仅允许在函数体外使用",
"被声明的变量不能是数组",
"被声明的函数或变量可被其它文件,插件,模块访问".
在AMXX1.8.2以上版本中,public
不再拥有"被声明的变量不能是数组"这个特性.
在函数体外,目前看来,同时使用new public
与单独使用public
没什么不同.
new
说明符允许将运行时表达式用作变量的初始化表达式.
但在函数体外无法表现出这个特性.AMXX不支持在函数体外运行函数.
因此,目前看来,同时使用new public
并没有什么用处.
// 声明一个公共变量,任何文件,插件,模块都能访问它.
new public gPublic = 222;
同时使用new public stock const
或new static stock const
声明自定义符号.
// 静态备用常量(实在没什么应用场景.大型插件可能会用到)
new static stock const gStaticStockConstant = 222;
// 公共备用常量(实在没什么应用场景.大型插件可能会用到)
new public stock const gPublicStockConstant = 222;
new
说明符最特殊的一点是:"在函数体内,可将运行时表达式用变量的作初始化表达式".
当new
被用于函数体外,则失去这一特性(AMXX不支持函数体外的运行时表达式).
由于new public static stock
声明的符号都拥有地址,目前看来,new
与public static stock
一起使用,不会增加任何好处.
但可以与const
一起使用.声明有地址的常量,使该常量可以通过地址被更改.或是声明有维度列表的数组常量.
在AMXX1.8.2以上版本中,amxconst.inc
文件内便声明了这种有地址常量.
虽然编译时该常量的值为0,但插件运行后,由模块更改它的值.
插件访问这个常量得到的是被更改后的值.
// 服务器最大客户端数量,由模块设定这个常量的值.
public stock const MaxClients;