static关键字可用于声明、定义全局变量以及局部变量,点击查看:变量指南
代码示例:
#include <amxmodx>
// 声明、定义仅当前文件可用的全局静态变量
static gDataVal = 1024;
public plugin_init()
{
// 声明、定义仅当前代码块可用的,不会被重定义、不会被销毁的局部静态变量
static dataVal = 1024;
}
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不能放最前面 |
编译报错 |
static关键字可用于声明、定义文件私有函数,也叫静态函数。
和文件私有变量类似,无论当前插件由多少文件组成,函数仅在当前文件中可使用。
若无跨文件、跨插件访问的需求,应该尽量使用静态函数代替其它类型的函数。
代码示例:
#include <amxmodx>
// 外部模块、插件以及当前插件所有文件皆可使用的函数
public plugin_init()
{
// 调用仅当前文件可用的静态函数
TestFunc();
}
// 声明、定义仅当前文件可用的静态函数
static TestFunc()
{
new cellCharCount = server_print("随便做点复杂的事情!");
server_print("上一句话总共包含%d个单元字符(包括终止符)", cellCharCount + 1);
}