AMXXPawn编译器指令#if #elseif #else #endif

#if #elseif #else #endif编译分支指令使用方法:

#if 常量表达式 任意注释,指令,语句 #elseif 常量表达式 任意注释,指令,语句 #else 任意注释,指令,语句 #endif

这些指令用于判断常量表达式是否满足某些条件.以便编译对应的代码.

#if的常量表达式为真:

保留#if#elseif中间的代码.舍弃#elseif#else,#else#endif中间的代码.

#if的常量表达式为假,且#elseif的常量表达式为真:

保留#elseif#else中间的代码.舍弃#if#elseif,#else#endif中间的代码.

#if#elseif的常量表达式都为假:

保留#else#endif中间的代码.舍弃#if#elseif,#elseif#else中间的代码.

#elseif#else是可选的,且#elseif的数量没有限制.

编译分支指令是可以嵌套的.每一个#if都必须与一个#endif配对.

示例:

#include amxmodx const gPluginVersion1 = 1; // 主版本号 const gPluginVersion2 = 0; // 次版本号 const gPluginVersion3 = 0; // 修订号 // ↓第1层起点 #if (0 < gPluginVersion1) // ↓第2层起点 #if (0 <= gPluginVersion2 && gPluginVersion2 < 10) // ↓第3层起点 #if (0 <= gPluginVersion3 && gPluginVersion3 < 10) static const gPluginVersion[] = { '0' + gPluginVersion1, '.', '0' + gPluginVersion2, '.', '0' + gPluginVersion3, EOS }; #else // 报错:gPluginVersion3的有效值是0至9 #error "The valid values for gPluginVersion3 are 0 to 9" #endif // ↑第3层终点 #else // 报错:gPluginVersion2的有效值是0至9 #error "The valid values for gPluginVersion2 are 0 to 9" #endif // ↑第2层终点 #else // 报错:gPluginVersion1必须大于0 #error "The value of gPluginVersion1 must be greater than 0" #endif // ↑第1层终点 public plugin_init() { register_plugin("测试插件", gPluginVersion, "插件作者"); server_print("[AMXX]插件版本 = %s", gPluginVersion); }

若将"主版本号"设置为小于1的值,编译时会触发第1层#else下的报错:

Error: User error: "The value of gPluginVersion1 must be greater than 0" on line 26

若将"次版本号"设置为小于0或大于9的值,编译时会触发第2层#else下的报错:

Error: User error: "The valid values for gPluginVersion2 are 0 to 9" on line 21

若将"修订号"设置为小于0或大于9的值,编译时会触发第3层#else下的报错:

Error: User error: "The valid values for gPluginVersion3 are 0 to 9" on line 16

若版本号3个值全部合规,则会满足第1,2,3层#if的条件,并定义gPluginVersion数组,逐步编译第3,2,1层#endif下的代码.

进入游戏后,按下 [~] 按键打开控制台,可以看见打印结果:

[AMXX]插件版本 = 1.0.0

需要注意,编译分支指令的常量表达式中不能填写无效代码或者变量表达式,因为表达式结果必定为假.