defined即是关键字,又是运算符。可在当前作用域内检查一个标识符是否已声明。
表达式语法:defined 标识符名称
这个表达式会在编译时返回1或0。在AMX Mod X 1.8.2以上版本中,该返回值带有bool标签。
若返回1,表示标识符已声明,若返回0,表示未声明。
这种表达式常用于决定是否将某段代码编译到amxx文件中。
示例1,避免用户重复引用同一个inc文件:
// 若已声明_amxmodx_included,执行#endinput指令,舍弃下面所有内容
#if defined _amxmodx_included
#endinput
#endif
// 若下面的代码未被舍弃……
// 声明_amxmodx_included,下次引用当前文件会触发上面的#endinput指令
#define _amxmodx_included
......
示例2,选择是否编译某段代码:
#include <amxmodx>
// 若当前版本的amxmodx.inc未声明MaxClients变量,那么手动声明这个变量
#if (!defined(MaxClients))
static MaxClients;
#endif
public plugin_precache()
{
// 若当前版本的amxmodx.inc含有MaxClients变量,必不可能等于0,
// 既然等于0,说明是咱手动声明的,纠正它的值
if (!MaxClients) MaxClients = get_maxplayers();
}