AMXXPawn sizeof关键字

sizeof即是关键字,又是运算符。用于获取变量或变量元素的尺寸:

#include <amxmodx> enum tZombieAppearance { _: ZA_MdlPath[64], _: ZA_BodyId, _: ZA_SkinId, bool: ZA_SunkInGround }; enum tZombieClass { _: ZC_Name[32], _: ZC_Appearance[tZombieAppearance], _: ZC_MaxHealth, _: ZC_MaxSpeed, Float: ZC_EyePos[3] }; static gCell, gCells[3], gArray[4][3][2], gZombieClass[tZombieClass]; // 断言gCell能储存1个值(单值的尺寸) #assert (sizeof gCell == 1); // 断言gCells有3个元素(一维数组的尺寸) #assert (sizeof gCells == 3); // 断言gArray有4个元素(三维数组的尺寸) #assert (sizeof gArray == 4); // 断言gArray的元素有3个元素(二维数组的尺寸) #assert (sizeof gArray[] == 3); // 断言gArray的元素的元素有2个元素(一维数组的尺寸) #assert (sizeof gArray[][] == 2); // 断言gArray的元素的元素的元素能储存1个值(单值的尺寸) #assert (sizeof gArray[][][] == 1); // 断言gZombieClass的尺寸等于tZombieClass(结构体的尺寸) #assert (sizeof gZombieClass == _:tZombieClass); // 断言ZC_Name属性有32个元素(结构体属性的尺寸) #assert (sizeof gZombieClass[ZC_Name] == 32); // 断言ZC_Appearance属性的尺寸等于tZombieAppearance(结构体属性的尺寸) #assert (sizeof gZombieClass[ZC_Appearance] == _:tZombieAppearance); // 断言ZC_Appearance结构体的ZA_MdlPath属性的尺寸等于64(结构体属性的尺寸) #assert (sizeof gZombieClass[ZA_MdlPath] == 64); // 编译失败,语法错误。虽然这符合直觉,但上面的才是正确语法 #assert (sizeof gZombieClass[ZC_Appearance][ZA_MdlPath] == 64);

注意事项:sizeof无法获取不规则数组的元素尺寸。

static gArray[2][] = { "We are pests !", // 此元素尺寸为15 "PESTS !" // 此元素尺寸为8 }; // 返回值为0,并且触发警告:"sizeof gArray..."表达式无法获取该数组尺寸 #assert (sizeof gArray[] == 0);