什么是PASCAL调用惯例 一个新手的问题

lingdang 2000-03-12 03:26:00
加精
传统编C++程序会用一条
int PASCAL WinMain (HINSTANCE hinstCur.......)
{
书上说:"这是PASCAL调用惯例,与C的调用的不同,PASCAL调用惯例在传送参数时
是由左向右依次置入堆战,,堆占的指针的还原可由被 调用的程序本身来负责
,若用C的调用惯例,则调用越多,程序码就越长,执行效率就越差."
我对书上解是的是懂非懂,为什么就用C调用惯例,调用越多,程序代码就越长呢???
(我是新手,麻烦您老人家告诉我的时候说的尽量详细一点,拜托了)
...全文
427 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cisco 2000-03-12
  • 打赏
  • 举报
回复
PASCAL调用是在在16位环境下支持的,PASCAL/FORTRAN命名规范是将名字转换成大写;函数调用规范是函数参数从左至右入栈,调用返回时堆栈的清除工作由被调用函数完成。在32位VC++环境下支持三种调用规范:C (_cdecl), standard (_stdcall), 及 fastcall (_fastcall),编译器不在支持PASCAL调用规范。在你以前使用 PASCAL 或 __far __pascal的地方使用宏WINAPI代替。
下面对这三种调用规范作一下对比:
-----------------------------------------------------------------------
_cdecl:
函数参数:从右至左入栈
堆栈清除:调用函数
命名规范:名字前加下划线"_"
------------------------------------------------------------------------
_stdcall:
函数参数:从右至左入栈
堆栈清除:调用函数
命名规范:名字前加下划线"_",后加"@"及参数所占的字节数
------------------------------------------------------------------------
_fastcall:
函数参数:前两个小于等于4字节的参数进寄存器,其余参数从右至左入栈
堆栈清除:调用函数
命名规范:名字前加"@",后加"@"及参数所占的字节数
------------------------------------------------------------------------

_cdecl比_stdcall及_fastcall调用生成的可执行文件的代码量要大,因为_cdecl调用时
需要每个调用函数包含被调用函数的堆栈清除代码。
kxy 2000-03-12
  • 打赏
  • 举报
回复
调用一个函数时,参数的传递是由堆栈来完成的,PASCAL的惯例是参数从左向右压入
堆栈,堆占的指针的还原可由被掉用的程序本身来负责,这样还原堆栈指针的代码
在被调用的函数中,此代码(还原指针)只有一份。
C的惯例是参数入栈是从右向左,堆占的指针的还原可由调用的程序本身来负责,
每调用一次,就生成一份堆占的指针的还原的代码,所以调用越多,程序代码就越长。
这里的代码是指编译连接后的机器代码。
make是在1977年在贝尔实验室(Bell Labs)研发的 Unix系统中的一款依赖关系检查工具程序(Utility software)。make的应用非常广泛,它被用来构建 C、C++ 、Pascal  Fortran 等项目,自动化构建生成可执行文件或者库文件。make通过读取Makefile文件以自动化建构软件, 它会根据依赖文件的修改时间进行判断。确定一个target的依赖关系,然后把生成这个target的相关命令传给shell去执行。GNU make 和大多数版本的 make 之间最重要的区别是 GNU make 是自由软件,常和GNU编译系统一起被使用,是大多数GNU Linux安装的一部分。GNU make 在 makefile 中具有许多强大的功能,超出了其他 make 版本的功能,它还可以重新生成、使用、然后删除不需要保存的中间文件。GNU make 还有一些非常方便的简单功能。例如,选项“假装源文件文件没有更改,即使它已更改。当您向头文件添加新宏时,这非常有用。大多数版本的 make 都会假设它们必须重新编译所有使用头文件的源文件,但是如果您知道对头文件的更改不需要重新编译 GNU make 为您提供了一种避免重新编译的方法-o file 。 黄强老师针对零编程基础的同学,精心打磨make核心知识点,帮助你快速掌握Linux编程中的make的构建!适用人群: 零基础、新手、想快速学习Linux下C、C++编程的童鞋!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧