LPC 语言基础教程:6.7 LPC语言中的数字0

本文节选自《LPC语言基础教程:从零学习游戏开发》,版权归@mudren,欢迎转载,但必须注明来源(mud.ren)。

在LPC语言中数字0是一个特殊的存在,它主要有以下用途:

整型常量0

最直接的用途就是表示一个整型数字0,可赋值给整型变量。如:

int i = 0;

逻辑假

在逻辑运算中,LPC语言和C语言完全一至,只有整型0和-0及浮点型0.0和-0.0代表逻辑假,其它全部为逻辑真。这里需要强调的是空字符串""在很多语言中是逻辑假,但在C语言和LPC语言中都为逻辑真,只有零为假。

未定义(undefined)

在LPC语言中,所有未定义的变量都会被初始化为整型0。包括以下几种情况:

  1. 变量未初始化,任何类型的变量在声明时没有初始化就调用其值都是整型0。如:
    object ob;
    // ob类型为int
    printf("%s",typeof(ob));
    // ob的值为0
    printf("%d",ob);
  2. 函数的形式参数在调用时没有实际传参,此参数不管是什么类型调用时值都是整型0
  3. 读取映射变量中不存在的元素,返回值为0
  4. 通过call_other调用对象中不存在的方法,返回值为0

以上4种情况下直接获取值都为0,使用undefined判断都为1。

赋值任何类型

0除了是变量未定义时的默认值外,也可以主动赋值给任何类型的变量,这是特别需要注意的一点,有且仅有常量0可以赋值给非整型变量,非0常量赋值给类型不一至的变量都会报错。

这个在开发中也经常使用到。一个简单的示例:

nosave object *enemy = ({});

void clean_up_enemy()
{
    int i;

    if (i = sizeof(enemy))
    {
        while (i--)
        {
            if (! objectp(enemy[i]) ||
                environment(enemy[i]) != environment() ||
                (! living(enemy[i]) && ! is_killing(enemy[i]->query("id"))))
            enemy[i] = 0;
        }
        enemy -= ({ 0 });
    }
}

变量enemy是一个对象类型的数组,存了所有敌人对象,但当敌人i不再是敌人时把数组元素i的值设为0,然后一个简单的enemy -= ({ 0 })清空无效元素。


教程更新中,欢迎留言……

京ICP备13031296号-4