C语言函数参数求值顺序.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言函数参数求值顺序

维普资讯 C语言函数参数求值顺序 骆 才清 本刊 1989年第 4期登载了朝 日同志 的 《c 便是朝 日同志所遇到的.后面列举 了一个小的C 语言调试一得》。该文指出 c语言没有规定调用 程序在两种版本 的c下生成 EXE文件 的反汇编 函数时参数求值顺序 .该顺序依赖于具体的实 结果 ,供读者参考和 比较。 现。不同的绾译程序可能采用不同的处理方法. 如果希望所编程序有较好的可移植性.则应 程序员不应该缩写对该顺序作出某种假定的程 粜朝 日同志文中所说的那样.避免类似这种依赖 序。就此.笔者通过分析生成的EXE文件,对 于编译程序的缩程方法。 ; LATT1CE C 和 CoMPUTER INNoVA. LatticeC下的薄程序 TIoNS c在参数求值顺序进行了探讨. # includestdio.h La垭ceC是 Lattice公司研制的一个两遍扫 # includectyp~.h 描程痔,生成的代码质量高。它包含了四种不同 main() 的运 行模式 (sM,PM.DM,LM).在此 , f 我们 只以生成代 码 最高效 的小模式 (SM)为 charaI10】; 例.在 函数调用时.同其它 c语言一样,只有 char ‘pr; ’ 值参替换,或者说,函数的参数替换是传值的。 a[O】= A’; 更确切地说,被调用函数接收的是每个参数的一 all】= B’; 个专用的 临时的副本 (放在堆栈中),而不是 at2]= C‘’: 它的地 址,这与 Fortran和 PL/l不同。对于 a[3】= D‘’; 数组,传送的是数组的起始地址 。Lattrc~C函 pr=a; 数在对参数处理分成两步.先由左至右求出各参 printf(%CYn%cYn%cYn, 数值,然后由右至左对参数一一压栈。由于按这 pr, pr十+, pI++·’p|+●; 样 的方式处理,因而执行朝 日同志程序 中的语 } 句 Primf( First= % C, Second= %C, COMPUTER INNOVATIONS C下 的量程 Third= % C\ n , 十 CP++ , 十 CP++ . 序 CP++);的过程如下 :先由左至右对参数求 main() 值.从‘左至右 的tcP++被替换为 A.B,c, { 然后将这些参数由右至左逐一压栈,最后执行打 charal【0】; 印过程 .在打 印过程 中,将参数逐一从栈 中弹 cha r pr; 出,并打印 结果顺序为 A,B,c,与作者期 atOl= A‘’; 望的一致。 a[tl= B‘’; CoMPUTER INNOVATIONSC 是 一 个 a[2l= C’: 含预处理 语法分析、代码生成 代码优化的四 a3【】= D’; 遍扫描程序。它对参数的求值顺序处理与前者不 pr=a; 一 样,对于参数的求值是在 自右向左压栈的同时 州n 。%CYn%cYn%c

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档