AMXXPawn goto关键字

在函数体内可使用:符号编写“跳转标签生成语句”,在编译时生成跳转标签(Label)。

在同一个函数体内,可使用goto关键字编写“跳转语句”,在运行时跳转到指定标签位置,执行代码。

点击查看跳转标签指南

应用场景:

  • for循环语句只允许单行迭代语句,而goto可以跳转到指定位置执行更加复杂的迭代语句
  • break只能跳出当前循环,goto可跳出多层嵌套的循环
  • 用goto和跳转标签模拟循环语句:

    public plugin_precache() { // 生成Init标签,模拟for循环语句的初始化语句位置 Init: server_print("来到Init位置执行代码."); new counter = 1; // 生成Continue标签,模拟for循环语句的条件表达式位置 Continue: server_print("第%d次来到Continue位置执行代码.", counter); if (counter < 10) { // 模拟for循环语句的循环体入口 // 这里填写for循环体内代码 // 可用goto Continue模拟continue关键字 // 可用goto Break和break关键字 server_print("第%d次进入循环体.", counter); // 模拟for循环语句的迭代语句 counter++; // 跳转到Continue:位置 goto Continue; } // 生成Break标签,模拟for循环语句的循环体出口位置 Break: server_print("来到Break位置执行代码."); }

    for循环语句参考:

    public plugin_precache() { // for (初始化语句; 条件表达式; 迭代语句) for (new counter = 1; counter < 10; counter++) { // 循环体入口 server_print("第%d次进入循环体.", counter); } // 循环体出口 }

    注意事项:

  • goto只能跳转到同一函数体内的标签位置
  • 若用goto跳过临时变量的声明语句,访问变量会得到垃圾数据