C语言函数形参的定义.docx

C语言函数形参的定义.docx

ID:50990394

大小:29.76 KB

页数:2页

时间:2020-03-08

C语言函数形参的定义.docx_第1页
C语言函数形参的定义.docx_第2页
资源描述:

《C语言函数形参的定义.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、函数形参和变量定义的不同原因Sunny.man学习linux一站式编程时,遇到了一句话“相同类型的变量可以列在一起,相同的形参却不可以列在一起”。也就是说inta,b;可以但是intSum(inta,b)却不可以。书中没有给出答案,让大家思考。但给了一个提示:说C语言的设计遵循最少例外的原则,这样规定是不得已为之。我被这句话深深的打动了,我就想知道C标准有什么难言的苦衷呢?我想了好几天,我也没想明白。我的思想就是肯定编译器不能正确解释,可是我就不明白了解释变量都可以,为什么解释这个就不行呢。我首先想到的是变参的函数,可能是变参影响的吧。可是我很快就知道不是这个原因。总之,我想了各种原因,没

2、一个是能站得住的。我百度了好几天也没有答案。没办法我问了一个大牛,大牛只是一句话“C语言的命名空间和c++不同造成的”.然后告诉我”全局的结构struct,联合union和枚举enum,位于一个命名空间下;所有其它的标识符,包括变量名、函数名、类型名(typedef)和枚举常量,位于一个命名空间下;由于结构struct和typedef类型名不在同一命名空间下,因此诸如:typedefstructStack_T*Stack_T;这样的定义一个Stack_T类型时可以的,并不会产生标识符冲突。”还有一个是以下方式并没有冲突:structA{inta};intA;听完大牛的话,我还是一头雾水,这

3、和我问的问题有什么关系呢。但我没好意思再问,我照着这个思路写了一个测试程序。#includetypedefintmyInt;voidDumpInt(inta,myInt);intmain(void){DumpInt(2,3);return0;}voidDumpInt(inta,myIntmyInt){printf("Firstintis%d,Secondintis%d",a,myInt);}在gcc(4.1)linux(2.6)下编译通过,并且运行正确。到此我明白了为什么变量可以并列写,但函数却不可以的原因。定义变量的时候inta,b;逗号后面的b只做为一个标识名来解

4、析,没有什么二意性。但如果声明一个函数的时候,可以intsum(inta,myIntb)也可以intsum(int,myInt).当然还可以intsum(inta,myInt);那当intsum(inta,myInt);时,我们就可以得到两种解析:第一种解释sum是一返回值为int带一个形参为int型名称为”a”和类型为int形参名为”myInt”的函数。第二种就是sum是一返回值为int带一个形参类型为int名为a,和一类型为myInt形参名没定义的函数。显然C语言不允许存在二义性。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。