编译器的强制类型转换 (Typecasting)-这里的 Typecasting 可不是指演员转型哟

很久以前我在编写代码时,经常使用且确实非常有用的一种编译器功能就是强制类型转换。共有两种基本编程语言(强类型弱类型)。使用诸如 Pascal 和 FORTRAN 编译器之类的强类型语言时,利用类型强制转换可以根据使用目的将一种数据类型强制转换为另一种数据类型。而在弱类型语言(如 C 和 C++)中,在进行类型转换时不需明确指定数据类型。换句话说,即使您的前面是万丈深渊,C 编译器也不会向您发出任何警告。而如果使用的是强类型语言,您必须告知编译器-“是的,我知道自己在做什么,让我跳下去吧!”强制类型转换的好处在于,它提供了一个“额外的”步骤,让您再仔细斟酌一下所要做的转换。如果转换时没有使用强制类型转换操作数,编译器会提示数据类型不符错误。

下面是名为 VAXELN 的实时 OS 中的代码片段。该编译器原名 EPASCAL 且支持强制类型转换和许多其他实时扩展。该强制类型转换带有“::”操作数。

procedure search_id(var header:queue_entry; id_in:integer; var found:boolean);

var walk:^queue_entry;

begin
    walk:=header.flink;
        repeat
            if walk::^store^.id=id_in
            then begin
                error ();
                walk:=address(header);
                found:=true;
                    end
            else
                walk:=walk^.flink;
        until walk = address(header);
end;    

我个人的体会,这确实对生成高质量的代码很有帮助。查找错误,尤其是那种不太明显的错误,在早期实现阶段至关重要。多少次您曾因指针 (^) 问题而导致间接寻址级别过多或过少并最终引发程序崩溃?适当编写一些巧妙的代码当然是可以的,只要编译器能够处理。不过好的代码至少应该干净、直观且易于理解。应该多花心思在项目的算法和/或设计上。代码编写不应拐弯抹角。质量和稳定性至关重要。多多征求一下软件客户的意见……

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s