c语言重载函数
㈠ c语言可不可以重载
1.从C语言的语法设计来说是不支持的,早期的C编译器未考虑过函数重载这一功能,所以就会有那么多类似的函数abs,labs,fabs等等(每种类型都要考虑一个不同的函数名)。
2.C语言标准就规定不允许同一作用域中两个函数重名。和C语言相关的域有两种,一个是给编译器看得,还有一种是给链接器看的,而给编译器看的这种域主要是关于
变量的可见范围,而链接器看到的那个是叫文件域,而全局域可能要跨越好几个文件域,这样只要两个同名函数用static修饰,并且在不同的文件中,就不会
冲突。不过这个实际上已经超越了编译器的范围,表面看起来两个函数同名,但是实际上编译器为链接器产生是指向的同一个函数地址。
3.函数重载是一个编译期行为,主要是通过name mangling来产生不同的汇编符号,让linker可以正确的link代码。
4.但是,C语言作为一个具有超强功能的底层语言,是有办法进行模拟函数重载的。那就是函数指针。最简单的例子就是qsort函数。这个函数可以传递一个函数指针变量,通过不同的函数指针,可以对不同的数据类型就行相同的qsort操作,从某种层面来说相当于函数重载。
㈡ C语言支持函数重载吗
C语言是不支持函数重载的,但是C++是可以的,这是C++对C的一个重要扩展。
㈢ 求C语言大神指教,出现有多个重载函数sqrt实例与参数列表匹配,以下是代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
int a,b,c,d;
double x1,x2;
printf("输入a,b,c(a不为0,数据间以空格隔开):");
scanf("%d %d %d",&a,&b,&c);
d=b*b-4*a*c;//b^2在c里面不是平方 ^异或运算符
if(d>=0)//用整形比较才比较精确
{
x1=(-b+sqrt((double)d))/(2.0*a);//说是有多个参数 可以float 可以double 你输入int的编译器不知道转换为哪一种
x2=(-b+sqrt((double)d))/(2.0*a);
printf("方程的根为:%f,%f.\n",x1,x2);
}
else
{
printf("方程无实根.\n");
}
system("pause");
return 0;
}
㈣ c语言不支持函数重载吗
其实printf重载c语言支持函数重载 句
printf函数通变参数表实现查看printf函数原型声明
printf函数实现同机器同提供接口致
printf函数确声明形式:
int printf(const *fmt,...)
其省略号表示参数表参数数量类型变变参数表固定形式
省略号能现参数表尾部!
㈤ C语言支持函数重载吗
不支持,C里面没有重载这个概念。因为C不是面向对象的语言。
㈥ c语言中,既然不支持函数重载,那么printf算怎么回事在c语言中,它不就是被重载了吗
这个问题问的不错。
其实printf不是重载,c语言不支持函数重载 这句话是对的。
printf函数是通过变长参数表实现的。你可以查看一下printf的函数原型声明。
printf函数的实现在不同的机器上是不同的,但提供的接口是一致的。
printf函数的正确声明形式如下:
int printf(const *fmt,...)
其中省略号表示参数表中参数的数量和类型是可变的。它是变长参数表的固定形式。
省略号只能出现在参数表的尾部。
具体的话你还是上网查查吧,我对这个原型也没研究。
我想既然你能问这个问题,看点资料不难理解,很快能明白怎么回事。明白了以后,你就可以自己写出这样变长参数表的函数了。好好加油!
㈦ C语言可以重载吗
1.从C语言的语法设计来说是不支持的,早期的C编译器未考虑过函数重载这一功能,所内以容就会有那么多类似的函数abs,labs,fabs等等(每种类型都要考虑一个不同的函数名)。
2.C语言标准就规定不允许同一作用域中两个函数重名。和C语言相关的域有两种,一个是给编译器看得,还有一种是给链接器看的,而给编译器看的这种域主要是关于
变量的可见范围,而链接器看到的那个是叫文件域,而全局域可能要跨越好几个文件域,这样只要两个同名函数用static修饰,并且在不同的文件中,就不会
冲突。不过这个实际上已经超越了编译器的范围,表面看起来两个函数同名,但是实际上编译器为链接器产生是指向的同一个函数地址。
3.函数重载是一个编译期行为,主要是通过name mangling来产生不同的汇编符号,让linker可以正确的link代码。
4.但是,C语言作为一个具有超强功能的底层语言,是有办法进行模拟函数重载的。那就是函数指针。最简单的例子就是qsort函数。这个函数可以传递一个函数指针变量,通过不同的函数指针,可以对不同的数据类型就行相同的qsort操作,从某种层面来说相当于函数重载。
㈧ 怎样用C语言实现 函数重载
c语言是面向过程语言,不存在函数重载,只有面向对象JAVA,C++有
㈨ C语言函数重载问题
C语言没有重载函数!printf是C语言的
函数
如果你是C++项目
那你直接写函数就行了
如果你也是先变长
参数
函数的话
那就编译出错呗!
㈩ C语言里的函数是否可以进行重载吗
标准C, 不支持函数重载。
函数重载是C++的概念。 不光是类的成员函数, 一般函数以及模板函数都是可以重载的。