AMXXPawn static关键字

1. 使用static创建变量

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

代码示例:

#include <amxmodx> // 声明、定义仅当前文件可用的全局静态变量 static gDataVal = 1024; public plugin_init() { // 声明、定义仅当前代码块可用的,不会被重定义、不会被销毁的局部静态变量 static dataVal = 1024; }

static声明的全局变量或局部变量都属于数据段变量,不需要执行声明语句,其初始值在插件启动时就已经确定。

若声明全局变量,可称呼为’文件私有变量‘或’全局静态变量‘。

全局变量会获得的特性:

若声明局部变量,可称呼为’局部静态变量‘,仅在声明语句所在代码块内可使用。

局部变量会获得的特性:

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

声明说明符组合 全局变量特性 全局变量批注 局部变量特性
static 储存在数据段
文件私有
储存在数据段
不重定义
不销毁
new static 储存在数据段(重复)
文件私有(覆盖插件私有)
语义冲突
建议删除new
编译报错
static stock
stock static
储存在数据段(重复)
文件私有(覆盖插件私有)
备用
若变量未被使用,会被删除 编译报错
static const 储存在数据段
文件私有
只读
变量无法被运算符改值
可访问变量地址改值
储存在数据段
不重定义
不销毁
只读
new static stock
new stock static
储存在数据段(重复)
文件私有(覆盖插件私有)
备用
若变量未被使用,会被删除
语义冲突
建议删除new
编译报错
new static const
new const static
储存在数据段(重复)
文件私有(覆盖插件私有)
只读
变量无法被运算符改值
可访问变量地址改值
语义冲突
建议删除new
编译报错
static stock const
static const stock
stock static const
stock const static
储存在数据段(重复)
文件私有(覆盖插件私有)
备用
只读
若变量未被使用,会被删除
变量无法被运算符改值
可访问变量地址改值
编译报错
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. 使用static创建函数

static关键字可用于声明、定义文件私有函数,也叫静态函数。

和文件私有变量类似,无论当前插件由多少文件组成,函数仅在当前文件中可使用。

与其不同的是公共函数插件私有函数

若无跨文件、跨插件访问的需求,应该尽量使用静态函数代替其它类型的函数。

代码示例:

#include <amxmodx> // 外部模块、插件以及当前插件所有文件皆可使用的函数 public plugin_init() { // 调用仅当前文件可用的静态函数 TestFunc(); } // 声明、定义仅当前文件可用的静态函数 static TestFunc() { new cellCharCount = server_print("随便做点复杂的事情!"); server_print("上一句话总共包含%d个单元字符(包括终止符)", cellCharCount + 1); }