c++==與c的函式對比(4)
阿新 • • 發佈:2019-01-02
與c有區別的函式包括行內函數,函式過載,以及帶預設引數函式之間的不同
行內函數:
在c語言中,利用的是巨集函式來處理頻繁使用的函式
巨集函式:函式是巨集定義
如:#define ADD (a,b) a+b
巨集函式與自定義函式的區別:
巨集函式:在預處理階段就進行替換(用編譯時間換取空間)
自定義函式:格式:int add(int a, int b),要分配空間,在編譯時處理
在c++中,行內函數的格式就是在型別名前加上inline
實現方法:將函式的內容搬到主程式中,即不需要跳轉,直接在主程式中順序執行。以空間換取執行時間。
函式過載
定義:相同的作用域,如果兩個函式名稱相同,而引數不同,我們把它們稱為過載overload
條件:函式名相同,但形參型別或者形參個數或者形參順序不同或者三者都不同。注意:函式的返回值不能作為函式過載的區別。
在c語言中,只要根據函式名選擇呼叫即可。
在c++中,會連上形參的型別,調用不了c的函式
//name managling的意思是名字改編
例項:
#include<iostream>
usingnamespace std;
void fun(inta, intb)
{
cout<<"int fun"<<endl;
}
void fun(doublea, doubleb)
{
cout<<"double fun"<<endl;
}
//extern "C"表示不進行名字改編,否則編譯的時候過載函式編譯器會對其名字進行改編
#ifdef__cpluscplus
extern"C"
{
#endif
void fun(inta)
{
cout<<"xxxx"<<endl;
}
void fun2(doublea)
{
cout<<"yyyy"<<endl;
}
#ifdef__cpluscplus
}
#endif
int main(void)
{
fun(3,4);
fun(3.3, 4.4);
fun(3 );
return 0;
}
用extern c,在c++編譯器中呼叫c的函式,並製作靜態庫:
#ifdef __cplusplus
//
gcc -c main.c
//把程式碼編譯為目標檔案形式
ar rcs libadd.a main.o
//使用工具ar建立一個存檔檔案
g++ demo.cpp -/add -L.
//編譯程式時把程式和liberr.a連結起來