C语言中,用PASCAL修饰符说明的函数与普通函数有什么不同?
用PASCAL修饰符说明的函数的调用约定与普通函数有所不同。对于普通的C函数,参数是自右至左传递的,而根据PASCAL调用约定,参数是自左至右传递的。下例是一个普通的C函数:
int regular_func(int,char*,long);
根据普通C函数的调用约定,函数参数入栈时的顺序为自右至左,因此,在调用regular()函数时,其参数的入栈顺序如下所示:
long
char·
int
当regular_func()函数返回时,调用regular_func()函数的函数负责恢复栈。
下例是一个用PASCAL修饰符说明的函数:
int PASCAL pascal_func(int,char *,long);
根据PASCAL调用约定,函数参数入栈时的顺序为自左至右,因此,在调用‘pascal—func()函数时,其参数的入栈顺序如下所示:
int
char *
long
当pascal_func()函数返回时,调用pascal_func()函数的函数负责恢复栈指针。
采用PASCAL调用约定的函数比普通C函数的效率要高一些——前者的函数调用要稍快一些。MicrosoftWindows就是一个采用PASCAL调用约定的操作环境的例子,WindowsSDK中有数百个用PASCAL修饰符说明的函数。
当Windows的第一个版本于80年代末期编写成功时,使用PASCAL修饰符能明显提高程序的执行速度。现在,计算机的运行速度已经相当快,PASCAL修饰符对程序运行速度的作用已经很小了。事实上,Microsoft在其WindowsNT操作系统中已经放弃了PASCAL调用约定。
在大多数情况下,采用PASCAL调用约定对程序的运行速度几乎没有明显的作用,因此,采用普通C函数的调用约定完全能满足编程要求。但是,当几个毫秒的运行时间对你的程序也很重要时,你就应该用PASCAL修饰符来说明你的函数。
int regular_func(int,char*,long);
根据普通C函数的调用约定,函数参数入栈时的顺序为自右至左,因此,在调用regular()函数时,其参数的入栈顺序如下所示:
long
char·
int
当regular_func()函数返回时,调用regular_func()函数的函数负责恢复栈。
下例是一个用PASCAL修饰符说明的函数:
int PASCAL pascal_func(int,char *,long);
根据PASCAL调用约定,函数参数入栈时的顺序为自左至右,因此,在调用‘pascal—func()函数时,其参数的入栈顺序如下所示:
int
char *
long
当pascal_func()函数返回时,调用pascal_func()函数的函数负责恢复栈指针。
采用PASCAL调用约定的函数比普通C函数的效率要高一些——前者的函数调用要稍快一些。MicrosoftWindows就是一个采用PASCAL调用约定的操作环境的例子,WindowsSDK中有数百个用PASCAL修饰符说明的函数。
当Windows的第一个版本于80年代末期编写成功时,使用PASCAL修饰符能明显提高程序的执行速度。现在,计算机的运行速度已经相当快,PASCAL修饰符对程序运行速度的作用已经很小了。事实上,Microsoft在其WindowsNT操作系统中已经放弃了PASCAL调用约定。
在大多数情况下,采用PASCAL调用约定对程序的运行速度几乎没有明显的作用,因此,采用普通C函数的调用约定完全能满足编程要求。但是,当几个毫秒的运行时间对你的程序也很重要时,你就应该用PASCAL修饰符来说明你的函数。