C语言支持函数重载吗?

如果不支持,那么出现两个函数名一样,参数不一样的函数会发生什么后果?

不支持,C里面没有重载这个概念。因为C不是面向对象的语言。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-06-30
C不支持;
C++支持,因而在C++的头文件中有很多因为要和C兼容,
extern "C"的语句就是避免有些C++中可以重载的函数在C中产生冲突。
第2个回答  2008-06-30
希望对你有参考

c语言不支持函数重载吗楼主yyhyan(天空)2005-06-11 17:33:11 在 C/C++ / C语言 提问
rt
问题点数:0、回复次数:15
Top

1 楼newbiestar()回复于 2005-06-11 18:28:20 得分 0 当然不支持……除非用一大把的MACRO来模拟,并且可能存在严重的Bug……
Top

2 楼newbiestar()回复于 2005-06-11 18:29:36 得分 0 其实把C++当作C用的话,C++还是很强的……

另外,函数重载是一个编译期行为,主要是通过name mangling来产生不同的汇编符号,让linker可以正确的link代码……
Top

3 楼foochow(无聊,灌水......)回复于 2005-06-11 19:58:53 得分 0 mark!!
Top

4 楼lionel_fighter(无名狐)回复于 2005-06-11 20:01:15 得分 0 c++之后出的才有
Top

5 楼bob_thb(绿果)回复于 2005-06-11 20:22:40 得分 0 没有.有
Top

6 楼ysbcg(Hummer)回复于 2005-06-11 20:27:46 得分 0 呵呵 当然不行 他的编译方式没那么智能 呵呵 其实智能的编译器就可以了
Top

7 楼steedhorse(晨星)回复于 2005-06-11 20:36:09 得分 0 什么智能不智能?C语言标准就规定不允许同一作用域中两个函数重名。如果一个C编译器允许两个重名,那不是“智能”,是个严重的不能再严重的bug。
Top

8 楼newbiestar()回复于 2005-06-11 21:00:36 得分 0 其实楼上的说法不是非常全面,和C语言相关的域有两种,一个是给编译器看得,还有一种是给链接器看的,而给编译器看的这种域主要是关于变量的可见范围,而链接器看到的那个是叫文件域,而全局域可能要跨越好几个文件域,这样只要两个同名函数用static修饰,并且在不同的文件中,就不会冲突……

不过这个实际上已经超越了编译器的范围,到达了链接器的管理区域了……表面看起来两个函数同名,但是实际上编译器为链接器产生的符号已经有了差别……
Top

9 楼wq06100610()回复于 2005-06-11 21:30:26 得分 0 对,同一个文件下可以用static void function1(void);来保证仅仅在文件中可见
Top

10 楼bianliuwei(零点起飞)回复于 2005-06-11 22:17:23 得分 0 用static是声明作用域的问题,和重载不是一个概念,重载是从c++才开始有的概念,根本不是同一个问题。
Top

11 楼swim_in_sky(路上慢慢走)回复于 2005-06-11 22:35:43 得分 0 不支持的!!
重载是c++的一大特点啊~~~
Top

12 楼newbiestar()回复于 2005-06-11 22:40:43 得分 0 回复人: bianliuwei(零点起飞) ( ) 信誉:100 2005-06-11 22:17:00 得分: 0

用static是声明作用域的问题,和重载不是一个概念,重载是从c++才开始有的概念,根本不是同一个问题。

=====================================
本就不是一个概念……C++的重载调用解析就是编译器在编译期间完成的,此时符号已经确定了
Top

13 楼steedhorse(晨星)回复于 2005-06-13 10:09:25 得分 0 “同一个文件下可以用static void function1(void);来保证仅仅在文件中可见”?
同一个文件下?你确定?
Top

14 楼steedhorse(晨星)回复于 2005-06-13 10:11:50 得分 0 这说到底还是个可见不可见的问题呀,同一个可见域中就是不可以重名的。而C++可以,至于是怎么实现的,我们暂时不讨论,因为跟楼主的问题无关,总之C语言不允许统一作用域中两个函数重名。
两个文件中的两个static函数,他们的作用域是不同的。
Top

15 楼pgy8288(Just Coding)回复于 2005-06-13 10:29:17 得分 0 重载是面向对象编程中才用到的方法,C语言是面向结构的

参考资料:http://topic.csdn.net/t/20050611/17/4075691.html

本回答被提问者采纳

c语言方法重载怎么实现?
理解C语言方法重载的关键在于明确C语言并不直接支持函数重载,但通过接口的多样调用形式,可以实现类似效果。这涉及到利用宏和参数的多样选择来丰富接口的使用方式。以图像处理库Morn为例,实现一条直线绘制接口的重载,通过设计函数和宏,提供多种调用形式,用户无需了解底层细节,只需选择合适的参数组合即可。

C语言支持函数重载吗?
不支持,C里面没有重载这个概念。因为C不是面向对象的语言。

C语言可不可以重载?
1.从C语言的语法设计来说是不支持的,早期的C编译器未考虑过函数重载这一功能,所以就会有那么多类似的函数abs,labs,fabs等等(每种类型都要考虑一个不同的函数名)。2.C语言标准就规定不允许同一作用域中两个函数重名。和C语言相关的域有两种,一个是给编译器看得,还有一种是给链接器看的,而...

c重载是什么意思
也就是说,重载函数会根据不同的参数类型和数量,自动匹配对应的函数。举个例子,int型和double型的加法函数是不一样的,因此可以分别定义两个同名的加法函数,用以区分不同的数据类型。C语言支持函数重载。

c++和c语言的区别
C语言不支持函数重载,而C++语言支持函数重载。函数重载是指在同一个作用域中定义多个函数,它们的函数名相同,但参数个数或类型不同。4、运算符重载 C语言不支持运算符重载,而C++语言支持运算符重载。运算符重载是指重新定义运算符的行为,使其适用于自定义类型。C语言的特点 其一,广泛性。C语言的...

c语言中,既然不支持函数重载,那么printf算怎么回事?在c语言中,它不就...
其实printf不是重载,c语言不支持函数重载 这句话是对的。printf函数是通过变长参数表实现的。你可以查看一下printf的函数原型声明。printf函数的实现在不同的机器上是不同的,但提供的接口是一致的。printf函数的正确声明形式如下:int printf(const *fmt,...)其中省略号表示参数表中参数的数量和类型是...

error C2373: 'Gameover' : redefinition; different type modifiers 是...
函数重定义:c语言经常出现这种情况,由于c语言不支持函数重载(同名),所以在定义和声明时,参数个数,类型,返回值类型不一样就会报这个错误,或者先调用了函数,没声明,定义在后面也会有这种情况。在main函数前加一行 原形声明 int max(int x,int y);或把函数定义 写到 前面 去。按格式要求 ...

C++和C语言的区别是什么?
1. 面向对象编程:C++支持面向对象编程,而C语言不支持。2. C++有命名空间:C++中引入了命名空间的概念,可以避免命名冲突,而C语言没有命名空间。3. 异常处理:C++支持异常处理机制,而C语言不支持。4. 函数重载:C++中支持函数重载,即同名函数可以有不同的参数类型和个数,而C语言不支持。5. 类型...

什么是C++重载?
C++重载是C语言中的一种函数表现方式,即重载函数。重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能...

我会c++,如果考试是c语言方面的知识,应该怎么办?
c++很多特性都不能搬到C语言里面去的.总的来说有以下几项是C语言(C89标准)不支持的:函数重载, 类结构, 引用, 运算符重载, 变量任意地方声明(C语言必须在语句之前, C99标准则和C++一样了), 如果靠到语法方面的知识, 那么这些都是必须要了解的. 如果考到算法方面的知识, 那和C++都差不多 ...

相似回答