c 和c的區別

2021-08-31 01:17:05 字數 2461 閱讀 6921

1.函式引數的預設值

c++引數預設值的賦值

必須從右向左,依次賦預設值

函式引數的預設值不可以重複賦值

當main函式編譯生成指令之後,其他檔案中修改某一引數不會造成影響,只有在同一檔案中重複賦值才會出錯

下面是具體的示例**:

#includeusing namespace std;

//int fun(int a= 100, int b , int c); //error賦值必須是從右向左,c和b還沒有被賦值

int fun(int a, int b, int c = 40);

int main()

//int fun(int a, int b, int c = 10) //error 在上面函式申明的時候已經給c賦過值了,不能重複賦值

int fun(int a, int b, int c)

2.內聯函式

內聯函式的形式:在普通函式前面加上inline

內聯函式會在呼叫點展開

**示例:

inline int fun(int a, int b)//內聯函式

內聯函式在不同版中的特點:

在debug版本中:在這個版中可以除錯,會生成乙個local符號,也會進行函式棧幀開闢回退之類的動作

在release版本中:不可以除錯,不會產生符號,也不會進行函式棧幀回退之類的動作,但會在呼叫點進行展開

內聯函式一定會展開嗎?inline函式知識對編譯器乙個建議,編譯器會在具體的情況下考慮是否處理成內聯

3.巨集:最大的隱患是沒有安全檢查

具體的**如下:

#define sum(a,b)

//巨集定義是在預編譯時期處理的,而其他函式傳參是在編譯時期

int main()

巨集的特點:

不存在棧幀的開闢

不存在引數的帶入

不存在返回值的帶出

不存在引數的清楚

不存在型別的檢查

不可以除錯

巨集、static函式和內聯函式的區別:

inline                  static                  巨集 

debug版本中會生成local符號 產生符號 不產生符號

release版本中不會生成符號

debug版本中會進行棧幀操作 進行棧指標操作 在呼叫點展開

release版中直接在呼叫點展開 (預編譯期)

(編譯期)

可以除錯 可以除錯 可以除錯

有型別檢查 有型別檢查 無型別檢查

4.過載

c語言中

在c語言中靠的是函式名來生成符號,若是函式名一樣,在編譯時期生成的符號是一樣的
c++中

在c++中,符號的生成是靠函式名和函式的引數列表生成的,這就是函式的過載

函式的過載需要注意一下幾個方面:函式名要相同

函式引數要不同

必須處於同一作用域

過載函式的示例:

bool compare_int(int a, int b)

bool compare_float(float a, float b)

bool compare_double(double a, double b)

bool compare_char(char a, char b)

bool compare_charptr(char *a, char*b)

上面**中每乙個函式過載之後得到的型別不同,但是有時候會出現給的引數的型別不明確,則函式過載會失敗,請看下面**:

bool compare(int a, int b)//compare_int_int

bool compare(float a, float b)//compare_float_float

bool compare(char a, char b)

bool compare(short a, short b)

bool compare(char *a, char*b)

int main()

此時程式就會出錯,主函式中給出的引數值是double型別,而double型別可以轉換成float,char,int,char*,此時主函式就不知道呼叫那個函式了,所以一定要明確型別。

今天就先介紹這些吧,後續還有c和c++的區別......

C 和C的區別

c 與c語言的關係 1 c 繼承了所有的c特性 2 c 在c的基礎上提供了更多更好的語法和特性 3 c 的設計目標是執行效率和開發效率的統一 c 對c語言的加強 1 c 中所有的變數都可以再需要使用時再定義 如 for迴圈等中需要的變數 3 c中可以定義多個同名的全域性變數 c 不可以 4 cons...

C和C 的區別

這裡主要討論的是區別,而不是c 中有的,而c語言中沒有的東西。c 比c語言多了很多東西,最重要的當屬類 物件導向程式設計 和模板 泛型程式設計 基於泛型程式設計還引出了元程式設計 metaprogramming 等等。這裡討 共部分但是不一樣的部分 函式過載是c 支援的,c不支援 c 的函式過載在類...

C 和C的區別

c c 的聯絡 c c 區別 小知識點補充擴充套件 free 而new開闢物件陣列用的是new size 釋放的的時候是 delete 5 返回值問題,malloc開闢成功返回void 需要強轉,失敗返回null,new 成功返回物件指標,失敗丟擲異常 這就可能會提到c 的new handler機 ...