猿问
C是否支持重载?
我只想知道C是否支持超载?当我们使用诸如printf之类的系统函数时,它们的参数个数不同。帮帮我
慕仙森
浏览 605
回答 3
3回答
蓝山帝景
不,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.[*]该标准实际上并没有说它们是通过栈传递的,或者根本没有提到栈,但这是自然的实现。
0
0
0
holdtom
这完全取决于您如何定义“支持”。显然,C语言在核心语言中提供了重载的运算符,因为C中的大多数运算符都具有重载的功能:您可以将,和指针类型与二进制+一起使用。intlong然而,在同一时间C不允许你创建你自己的重载函数和C标准库也有诉诸不同名称的功能与不同类型(如使用abs,fabs,labs等)。换句话说,C在某种程度上已将重载硬编码到核心语言中,但是标准库和用户都不允许自己进行重载。
0
0
0
随时随地看视频
慕课网APP
相关分类
C
typedef入门问题
1 回答
我要回答