cs1.6 amxx编程 static精研教程 -- 作者:偶萤蛉(Oinling)

目录:

1:static简介

1.1:static的语法格式

1.2:static的特性

2:static声明函数详解

2.1:说明符1

2.2:static

2.3:说明符3

2.4:说明符4

2.5:标签

2.6:函数名称

2.7:参数列表

2.8:状态分类器

2.9:函数体

3:static声明变量详解

3.1:说明符1

3.2:static

3.3:说明符3

3.4:说明符4

3.5:标签

3.6:变量名称

3.7:维度列表

3.8:初始化表达式

4:实例-static的基本使用方法

4.1:声明函数

4.2:声明变量

4.3:与其它说明符一起使用

4.3.1:static const静态常量

4.3.2:static stock静态备用变量

4.3.3:new static静态变量

4.3.4:static stock const静态备用常量

4.4:总结

1:static简介

1.1:static的语法格式

static声明函数的语法格式:

说明符1 static 说明符3 说明符4 标签 函数名称 参数列表 状态分类器 函数体;

参考:

/*无*/ static stock /*无*/ bool: customFunction (param1, param2, param3) <Automaton:State> {}

static声明变量的语法格式:

说明符1 static 说明符3 说明符4 标签 变量名称 维度列表 初始化表达式;

参考:

new static stock const bool: customSymbol [2][2][2][2] =true;

1.2:static的特性

static可用于声明"静态函数"或"静态变量".

声明函数时,static可以与stock说明符同时存在.

声明变量时,static可以与new stock const说明符同时存在.

static是2号位的说明符,只有1号位的new能写在static左边.3号位的stock,4号位的const必须写在static的右边.

static说明符有以下特性:

1:可声明函数或变量.

2:被声明的函数或全局变量,仅当前文件可访问.其它文件,插件,模块都无法访问.

3:被声明的局部变量,不会被销毁.因此,下次进入代码块,依然能访问变量最后一次储存的值.

相对其它说明符,static的第2与第3个特性是独一无二的.

static的特性拥有仅次于new的优先级.

同时使用多个说明符时,若与其它说明符的某些特性有冲突,以高优先级的为主.

2:static声明函数详解

2.1:说明符1

声明函数时,不允许填写说明符1.因为new作为唯一的1号位说明符,不能用于声明函数.

2.2:static

static说明符写在函数体外.可用于声明静态函数.

调用静态函数的代码,可以写在声明函数的代码上面.

不像声明变量的时候,仅允许把调用变量的代码写在声明的代码下面.

2.3:说明符3

说明符3是可省略的.

说明符3只能写stock,这是唯一的3号位说明符.

若填写stock,编译器不会警告符号(函数)未被调用.

若符号(函数)未被调用,则编译时,不会将符号(函数)写入amxx文件,不会占用内存空间.

2.4:说明符4

声明函数时,不允许填写说明符4.因为const作为唯一的4号位说明符,不能用于声明函数.

2.5:标签

标签是可省略的.

在函数名称左边填写标签.表示该函数的返回值所属类型,或具体用途.

若省略标签,则默认该函数返回值使用 _: 标签.

2.6:函数名称

函数名称是自定义的,命名时应遵从符号命名规则.

在AMXX1.8.3以下版本中,符号名称不得超过31个字符.

在AMXX1.8.2以上版本中,符号名称不得超过63个字符.

名称的第一个字符必须是"_ @ az AZ"这四者之一.

名称的剩余字符必须是"_ @ az AZ 09"这五者之一.

通常根据用途,给符号设定相关的英文名.

不得与保留词或用户声明的其它符号重名.

2.7:参数列表

参数列表必须以 ( ) 符号作为出入口.其内可填入多个参数.

参数列表用于声明函数正确运作所需的参数.参数的数量没有限制.且允许有默认值.

每个参数需要用 , 符号隔开.

2.8:状态分类器

状态分类器必须以 < > 符号作为出入口,其内可填入多个状态名称.

状态分类器用于将函数划分给特定的插件状态,仅在该状态下能被调用.

更多详情,请参阅:cs1.6 amxx编程 状态分类器精研教程.

2.9:函数体

函数体可以使用 { } 符号作为出入口.其内可填入多条语句.

若省略 { } 符号,则仅允许填写1条语句.且允许以 ; 符号结尾(检查分号模式下,必须以 ; 符号结尾).

每个public仅允许声明一个函数.因此函数体结尾不允许用 , 符号连续声明函数.

3:static声明变量详解

3.1:说明符1

说明符1是可省略的.

说明符1只能写new,这是唯一的1号位说明符.

但函数体内不允许同时使用new static声明变量.它们的特性有冲突.

new的特性是:"在函数体内,可将运行时表达式用作变量的初始化表达式".

目前看来,在函数体外同时使用new static与单独使用static并没有什么不同.

3.2:static

static说明符仅可写在函数体外.可用于声明静态变量.

调用变量的代码,不能写在声明变量的代码上面.

不像声明函数,调用函数的代码,可以写在声明函数的代码上面.

static声明的变量拥有地址,可通过地址查改变量的值.

3.3:说明符3

说明符3是可省略的.

说明符3只能写stock,这是唯一的3号位说明符.

若填写stock,编译器不会警告符号(变量)未被调用.

若符号(变量)未被调用,则编译时,不会将符号(变量)写入amxx文件,不会占用内存空间.

3.4:说明符4

说明符4是可省略的.

说明符4只能写const,这是唯一的4号位说明符.

表示声明的变量只能被初始化表达式设置默认值.接下来的代码中不能被任何运算符更改.

3.5:标签

标签是可省略的.

声明每个变量都可在左边填写标签.表示该变量的运算方式或用途.

若省略标签,则默认该变量使用 _: 标签.

3.6:变量名称

变量名称是自定义的,命名时应遵从符号命名规则.

在AMXX1.8.3以下版本中,符号名称不得超过31个字符.

在AMXX1.8.2以上版本中,符号名称不得超过63个字符.

名称的第一个字符必须是"_ @ az AZ"这四者之一.

名称的剩余字符必须是"_ @ az AZ 09"这五者之一.

通常根据用途,给符号设定相关的英文名.

不得与保留词或用户声明的其它符号重名.

3.7:维度列表

维度列表是可省略的.

声明每个变量都可在右边填写维度列表(方括号).表示该变量的数据结构.

若省略维度列表,则默认该变量仅能储存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个数值.

方括号中的数值必须是字面量或无地址的常量,像static声明的有地址变量是不允许填入维度列表的.

方括号中的数值是可省略的.省略时,编译器会根据初始化表达式决定具体数量(这种情况下不允许省略初始化表达式).

3.8:初始化表达式

初始化表达式是可省略的.

声明每个变量都可以在其维度列表右边(若没有就在变量名称右边)填写初始化表达式(以 = 符号开头的赋值表达式).

表示该变量的默认值.

若被声明的变量是数组,应赋值为字符串或数组字面量.否则应赋值为单个数值字面量.

若省略初始化表达式,则该变量的默认值为0.

初始化表达式可以用 , 符号结尾,用于连续声明变量.

也可以用 ; 符号结尾,表示停止继续声明变量.

通常情况下是可以省略 ; 符号的.但在检查分号模式下不允许省略 ; 符号.

4:实例-static的基本使用方法

4.1:声明函数

// 最普通的声明方式(没有参数,没有设定函数返回值.函数默认返回0) static function1() { } // 声明返回值固定为1的静态函数 static function2() return 1; // 声明带有标签的静态函数 static Float:function3() return 15.0; // 声明返回值由参数决定的静态函数 static function4(p1, p2, p3) return p1 + p2 + p3; // 声明返回值为数组的静态函数 static function5(p1) { static array[32]; switch (p1) { case 0: array = "p1等于0"; case 1: array = "p1等于1"; default:array = "p1等于其它"; } return array; }

public声明的函数能被外界访问,而static则不同,仅允许当前文件访问.

若希望当前插件的每个引用文件中都能访问自定义函数,则不应该使用任何说明符.

没有说明符的函数,若函数名第1个字符不是 @ 符号,则是私有函数.仅允许当前插件访问.

4.2:声明变量

// 最普通的声明方式(未填写初始化表达式,因此变量的值为0) static gVariable1; // 连续声明多个变量,并初始化 static gVariable2 = 2, gVariable3 = 3, gVariable4 = 100; // 声明带有标签的变量 static bool:gVariable5 = true, Float:gVariable6 = 222.0; // 声明拥有维度列表的变量,这是尺寸为4的1维数组,拥有4个值为0的元素(仅AMXX1.8.3以上版本支持) static gVariable7[4]; // 声明尺寸由初始化表达式决定的1维数组变量,拥有4个元素,因此尺寸为4 static gVariable8[] = { 1, 2, 3, 4 }; // 声明尺寸为5的3维数组变量,并设定其内2维数组的尺寸为2,1维数组的尺寸为3 static 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 }, } };

4.3:与其它说明符一起使用

4.3.1:static const静态常量

同时使用static const,则所声明的符号是是有地址的公共常量.

去除const的特性:

"不能连续声明常量",

"声明的常量不能是数组",

"声明的常量必须初始化",

"声明的常量不能用作引用参数".

保留const的特性:

"声明的常量不能被运算符更改".

// 声明一个有地址的静态常量,不能被运算符更改. static const gStaticConstant = 222;

4.3.2:static stock静态备用变量

同时使用static stock,则声明的变量是静态备用变量.

去除stock的特性:

未知.

保留stock的特性:

"说明符仅允许在函数体外使用",

"不警告符号未被使用,不将未被使用的符号编译到amxx文件".

// 声明一个静态备用变量,接下来的代码中并未调用它,则不被写入amxx文件,因此不会触发警告:"gStaticStock符号从未被使用" static stock gStaticStock = 222;

4.3.3:new static静态变量

目前看来,同时使用new static与单独使用static没什么不同.

new说明符允许将运行时表达式用作变量的初始化表达式.

但在函数体外无法表现出这个特性.AMXX不支持在函数体外运行函数.

因此,目前看来,同时使用new static并没有什么用处.

// 声明一个静态变量,仅当前文件可以访问它 new static gNewStatic = 222;

4.3.4:static stock const静态备用常量

同时使用static stock const,则所声明的符号是静态备用常量.

继承stockconst的特性,使被声明的符号不能被运算符更改.并且在未被使用情况下,不会被编译到amxx文件中.

// 声明一个静态备用常量 static stock const gStaticStockConstant = 222;

4.4:总结

static使函数和全局变量仅在当前文件中可用.

static使局部变量表现出全局变量的效果,但仅在特定代码块内可用.

总而言之,static用于限制自定义符号的可见范围.