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++的概念。 不光是類的成員函數, 一般函數以及模板函數都是可以重載的。