AMXXPawn stock关键字

1. 使用stock创建变量

stock关键字可用于声明、定义全局变量,点击查看:变量指南

代码示例:

#include <amxmodx> // 声明、定义仅当前插件可用的全局变量,若变量未被使用,将会被舍弃,不触发编译警告 stock gDataVal1 = 1024; // 声明、定义仅当前插件可用的全局变量,若变量未被使用,将触发编译警告:标识符"gDataVal2"从未被使用 new gDataVal2 = 1024; public plugin_init() { // 不使用gDataVal1和gDataVal2变量,gDataVal2会触发警告,gDataVal1不会 }

单独使用stock声明全局变量几乎与new相同,仅多出一个’备用‘特性。

用stock声明的变量,可称呼为'备用变量'。

备用变量的设计初衷是按需编译,方便inc文件的设计,确保未使用的变量不会增加插件的文件体积。

通常是我们做好一个模块化插件后,创建一个inc文件,声明一些与插件内容相关的备用变量,让第三方插件有选择的使用。

例如用备用变量储存你的插件名称、模块名称、插件版本、作者名称等等。

通常不应该声明备用单值变量,对于没有变化需求的单值,声明常量才是更优先的选择。

虽然amxconst.inc文件中有同时使用public stock const声明的公共备用只读单值变量,随时更改数值,

但那是amxmodx核心模块用特殊手段(后门)制作的共享备用公共变量(amxmodx公共变量)。

我们用amxx插件无法制作amxx插件公共变量或amxmodx模块公共变量,详情点击:public变量指南

至少在AMX Mod X 1.10.0和旧版本中无法做到。

stock与其它声明说明符组合:

声明说明符组合 全局变量特性 批注
stock 储存在数据段
插件私有
备用
new stock 储存在数据段(重复)
插件私有(重复)
备用
建议删除意义重复的new
public stock
stock public
储存在数据段(重复)
插件私有(重复)
生成AMX平台公共变量
语义冲突
建议删除失去备用意义的stock
stock static
static stock
储存在数据段(重复)
文件私有(覆盖插件私有)
备用
stock const 储存在数据段
插件私有
只读
备用
new public stock
new stock public
储存在数据段(重复)
插件私有(重复)
生成AMX平台公共变量
语义冲突
建议删除失去备用意义的stock
建议删除意义重复的new
new static stock
new stock static
储存在数据段(重复)
文件私有(覆盖插件私有)
备用
建议删除无意义的new
new stock const
new const stock
储存在数据段(重复)
插件私有(重复)
只读
备用
建议删除意义重复的new
public stock const
public const stock
stock public const
stock const public
储存在数据段(重复)
插件私有(重复)
生成AMX平台公共变量
只读
语义冲突
建议删除失去备用意义的stock
const只对私有变量有效
static stock const
static const stock
stock static const
stock const static
储存在数据段(重复)
文件私有(覆盖插件私有)
备用
只读
new public stock const
new public const stock
new stock public const
new stock const public
new const public stock
new const stock public
储存在数据段(重复)
插件私有(重复)
生成AMX平台公共变量
只读
语义冲突
建议删除意义重复的new
建议删除失去备用意义的stock
const只对私有变量有效
组合时const不能放最前面
new static stock const
new static const stock
new stock static const
new stock const static
new const static stock
new const stock static
储存在数据段(重复)
文件私有(覆盖插件私有)
备用
只读
建议删除无意义的new
组合时const不能放最前面

2. 使用stock创建函数

stock关键字可用于声明、定义文件私有备用函数插件私有备用函数

备用函数的设计初衷是按需编译,方便函数库(inc文件)的设计,确保未使用的函数不会增加插件的文件体积。

若该函数未被使用,编译器不会检查函数内部语法错误,不会触发未使用警告,直接舍弃。

代码示例:

#include <amxmodx> // 外部模块、插件以及当前插件所有文件皆可使用的函数 public plugin_init() { // 不调用备用函数,则该函数会被舍弃 //TestFunc(); } // 声明、定义仅当前插件可用的备用函数,虽然内部写了一些乱七八糟的错误代码,但只要不使用这个函数就没事 stock TestFunc() { @@@^&*() (^_^) return (T_T) }

对于插件自身需要使用的函数,应该使用文件私有函数插件私有函数