为了账号安全,请及时绑定邮箱和手机立即绑定

C是否支持重载?

C是否支持重载?

C
慕仙森 2019-12-03 15:17:48
我只想知道C是否支持超载?当我们使用诸如printf之类的系统函数时,它们的参数个数不同。帮帮我
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

不,C不支持任何形式的重载(除非您将内置运算符已经重载为一种重载形式)。


printf使用称为varargs的功能工作。您拨打的电话看起来可能过载了:


printf("%d", 12); // int overload?

printf("%s", "hi"); // char* overload?

其实不是。只有一个printf函数,但是编译器使用一种特殊的调用约定来调用它,其中您提供的任何参数都按顺序放在stack [*]上。printf(或vprintf)检查格式字符串,并使用该字符串确定如何读回这些参数。这就是为什么printf不是类型安全的原因:


char *format = "%d";

printf(format, "hi"); // undefined behaviour, no diagnostic required.

[*]该标准实际上并没有说它们是通过栈传递的,或者根本没有提到栈,但这是自然的实现。


查看完整回答
反对 回复 2019-12-03
?
holdtom

TA贡献1805条经验 获得超10个赞

这完全取决于您如何定义“支持”。


显然,C语言在核心语言中提供了重载的运算符,因为C中的大多数运算符都具有重载的功能:您可以将,和指针类型与二进制+一起使用。intlong


然而,在同一时间C不允许你创建你自己的重载函数和C标准库也有诉诸不同名称的功能与不同类型(如使用abs,fabs,labs等)。


换句话说,C在某种程度上已将重载硬编码到核心语言中,但是标准库和用户都不允许自己进行重载。


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 604 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信