java形参和c语言形参,关于形参表

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

楼主,我再跟你说下吧。

int f()和int f(void)的区别,实际上这种问题没必要讨论,可以认为两者相同。为什么?

在C的标准中,int f()代表的是不定参数。C有种形参叫做“不定参数”,类似你调用printf(.....)的时候,它的参数就是不定参数,意思就是参数类型和数量不确定。但是,不定参数只有在使用va_list,va_start之类的情况下,才是有用的。就跟“不脱裤子放屁”和“脱裤子放屁”有什么区别?只有在裤子遇到屁会燃烧的时候才有用。但是谁会穿条遇到屁会燃烧的裤子?既然裤子遇到屁不会燃烧,为何要脱裤子再放屁?类似的,如果你不用va_list,怎么可能使用不定参数?也不可能达到不停参数的目的。既然你定义的函数都没有不定参数,区分有没有void有何意义?。所以,强调int f()和int f(void)在编译后的区别的人,都是脱裤子放屁。

为什么C的编译器(例如GCC)执行f(0)可以执行,但是C++不行呢?那是因为C的编译器不做这种强制性的类型检查,而C++做了这种检查。相应的,你在C++里,把一个不定参数的函数,声明为空参数,例如函数void f(int i,...),你声明为void f(),依然无法通过编译。这只能说标准上的严谨问题以及处理方式上的不同(但这不是代码实现上的不同)。

不用放屁这种比喻了,就拿编程来说吧,java等高级语言的编译器是会检查数组边界的,但是C和C++是不进行边界检查的,但是你不能说C和C++的数组是没有边界的,只是编译器不检查而已。

像@sunchy12345678 这种一上来就说“滚”什么的口臭男,非要强调放屁脱不脱裤子有很大区别的,我只想说,你倒是拿出一种因为区别而导致代码实现上的不同啊?别一直拿编译器检查报不报错来说事。而且,楼主你也说了,是在“定义”的时候。int f(){return 1;}和int f(void){return 1;}有什么区别了?@sunchy12345678 。不过如果楼主你定义了一个不定参数的int f(int i,...),那么你在c编译器下“声明”int f()和int f(void)是有区别的(c++无区别),也仅仅是编译器进行类型检查的区别,其他是没区别的。还是那句话,就在于放屁脱不脱裤子。

不过话说,虽然int f()和int f(void)是一样的,但是你加上void可以增加可读性,让人一看就知道没有参数。并且如果你用C++的话,如果f不重载,并且无参数,加上void会让人感觉一目了然。就跟一个人放屁脱裤子,会让人觉得,这个人要放屁了,一目了然。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值