C 迎娶C的聘禮

2021-07-25 13:17:27 字數 1115 閱讀 2571

part1:

c++和c是程式語言的雙星,c++到c是物件導向語言到面向過程的跨越,但是他們確是兩種完全

不同的編譯鏈結處理方式

,如果直接在c++裡面呼叫c函式,會找不到函式體,報鏈結錯誤。要解決這個問題,就要在 c++檔案裡面顯示宣告一下哪些函式是c寫的,要用c的方式來處理。

part2:

extern "c" 是c++語言,包含

雙重含義

:首先,被它修飾的目標是"extern"的;其次,被它修飾的目標是"c"的。

(1) 被extern限定的函式或變數是extern型別的:

a.extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告externint v,然後就可以引用變數v。

b.extern修飾函式宣告。從本質上來講,變數和函式沒有區別。

(2) 被extern "c"修飾的變數和函式是按照c語言方式編譯和連線的;

part3:

情況如下:

a.呼叫標頭檔案【如果引用多個】

extern 「c」

;然後在呼叫這些函式之前,需要將函式也全部宣告一遍。

b.呼叫函式,將用到的函式全部重新宣告一遍

extern 「c」

part4:

c++程式中呼叫被c編譯器編譯後的函式,為什麼要加extern "c"?

c++語言支援函式過載,c語言不支援函式過載。函式被c++編譯後在庫中的名字與c語言的不同。假設某個c 函式的宣告如下:

void foo(int x, int y);

該函式被c 編譯器編譯後在庫中的名字為_foo,而c++編譯器則會產生像_foo_int_int之類的名字用來支援函式過載和型別安全連線。由於編譯後的名字不同,c++程式不能直接呼叫c 函式。c++提供了乙個c 連線交換指定符號extern「c」來解決這個問題。例如:

extern 「c」

或者寫成

extern 「c」

這就告訴c++編譯譯器,函式 foo 是個c 連線,應該到庫中找名字_foo 而不是找_foo_int_int。c++編譯器開發商已經對c 標準庫的標頭檔案作了extern「c」處理,所以我們可以用#include 直接引用這些標頭檔案。

昂貴的聘禮

時間限制 1000 ms 記憶體限制 10000 kb 難度 4 描述 年輕的探險家來到了乙個印第安部落裡。在那裡他和酋長的女兒相愛了,於是便向酋長去求親。酋長要他用10000個金幣作為聘禮才答應把女兒嫁給他。探險家拿不出這麼多金幣,便請求酋長降低要求。酋長說 嗯,如果你能夠替我弄到大祭司的皮襖,我...

昂貴的聘禮

description 年輕的探險家來到了乙個印第安部落裡。在那裡他和酋長的女兒相愛了,於是便向酋長去求親。酋長要他用10000個金幣作為聘禮才答應把女兒嫁給他。探險家拿不出這麼多金幣,便請求酋長降低要求。酋長說 嗯,如果你能夠替我弄到大祭司的皮襖,我可以只要8000金幣。如果你能夠弄來他的水晶球,...

昂貴的聘禮

年輕的探險家來到了乙個印第安部落裡。在那裡他和酋長的女兒相愛了,於是便向酋長去求親。酋長要他用10000個金幣作為聘禮才答應把女兒嫁給他。探險家拿不出這麼多金幣,便請求酋長降低要求。酋長說 嗯,如果你能夠替我弄到大祭司的皮襖,我可以只要8000金幣。如果你能夠弄來他的水晶球,那麼只要5000金幣就行...