Delphi 2010学习笔记(20)---例程的定义与使用---2011-01-26

1. 基本格式:

      function 名称(参数列表):返回值类型;  //例程首部

      局部声明区

      begin

          //例程实现代码

      end;

   或者:

      procedure 名称(参数列表);  //例程首部

      局部声明区

      begin

          //例程实现代码

      end;

 

   局部声明区可以声明数据类型,常量,变量,甚至是另一个例程(即例程嵌套)。

 

2. 函数返回值:

        result变量作为返回值:只有编译器开关{$X+}状态时,result变量才有效,系统默认{$X+}状态。

        函数名作为返回值:有诸多不便之处,建议任何时候都是用result

 

3. 例程的调用约定:

        所谓调用约定是指调用例程时,系统对于例程实参的一种处理方法,其影响参数的入栈及出栈顺序、传递参数时寄存器的使用、程序的错误与异常的处理。其中与用户最为相关的是其决定了调用例程时参数的传递顺序。

        delphi提供5中调用约定,按参数的传递顺序可分为:一是从左至右传递,包括pascal与register两种方式。delphi默认的是register方式。二是从右至左的方式:包括cdecl、stdcall、safecall三种。 

        ●      通常默认的register最有效。若某个属性是published,此属性的读写方式必须是register方式

        ●      当调用某个使用C/C++编写的共享库(如.dll或.lib)中的例程时,必须使用cdecl

        ●      当调用其他外部代码时,尽量使用stdcall或safecall。windows API函数大多使用此种方式

 

4. 例程内嵌

        当系统需要调用一个例程时,会暂停当前代码的执行,计算例程所需的所有参数,然后进入例程所在的区域执行例程代码,执行完毕后携带例程的返回值返回之前的代码段继续执行。

        对于多数情况而言,按照以上方式调用一个例程并不会浪费多少时间,但在某些情况下需要频繁调用一些较为短小的例程时,这种浪费会相当可观。因此,Delphi 提供了 Inline 指示符用于内嵌一个例程。

        所谓内嵌例程指编译器在编译时会将某个例程的定义代码直接拷贝至调用它的位置。

        内嵌例程的定义直接在普通函数声明后加上关键字 Inline 即可。内嵌例程可以提高程序的执行速度,但是会增大程序文件的体积。

        并非所有的例程都可以内嵌至目标代码。以下情形中使用的例程将不会被内嵌。

       (1) 任何迟绑定方法包括:virtual、dynamic、message 不能内嵌

       (2) 含有汇编代码的例程不能内嵌

       (3) 类的构造函数与析构函数不能内嵌

       (4) 主程序块、单元的initialization及finalization部分中的代码不可内嵌。

       (5) 单元中的内嵌例程先定义后使用。

       (6) 含有开放数组参数的例程不能内嵌

       (7) 包中的代码可以内嵌

       (8) 循环引用的单元间不存在内嵌,但是可以内嵌循环外的单元中的代码

       (9) 若某内嵌例程使用了其他单元中的代码,则其引用的单元必须全部在uses部分列车,否则此例程将不能内嵌

       (10) 若某例程在Interface部分声明但其代码中使用了定义于 implementation 部分的变量,则此例程不可加 inline 关键字

       (11) 若在 while - do 和 repeat - until 中使用的条件表达式中含有例程,则此处的例程不被内嵌。但其他地方使用此例程则可以被内嵌

 

       delphi提供了{$INLINE}开关控制对内嵌的处理。

       {$INLINE ON}   此状态下,带Inline关键字的例程将会被内嵌,delphi默认此状态

       {$INLINE AUTO} 此状态下,带Inline关键字的例程将会被内嵌,另外,代码不大于32字节的将会自动被内嵌

       {$INLINE OFF}  此状态下,所有的例程都不会被内嵌,即便带Inline关键字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值