C C 還能混合程式設計

2021-10-13 09:20:44 字數 2352 閱讀 3134

我們都知道c是乙個結構化語言,它的重點在於演算法和資料結構。c程式的設計首要考慮的是如何通過乙個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)

對於c++,首要考慮的是如何構造乙個物件模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取物件的狀態資訊得到輸出或實現過程(事務)控制

那麼什麼是c/c++混合程式設計?實際上簡單點說c/c++混合程式設計就是在同乙個工程中,在c函式中呼叫c++函式或者在c++的函式中能夠呼叫c函式的方法。

也許我們會有疑問,兩者主要的功能都不一樣,語法也不是完全相同,這不是沒事找事嗎?

實際在我們實際開發中,我們還是會用到的,比如c++語言支援函式過載,c語言不支援函式過載,那麼在c工程中加入c++就有用處了。

另外,如果乙個完整的工程是用c語言實現的,但是再進行增改功能或者移植的時候,另乙個工程師只會c++怎麼辦?那麼同樣,為了提高工作效率,還是各司其職,提供介面即可。

c++ 可以看作是c語言的擴充套件,它們呼叫的規則是相同的,但不同的程式語言都有自己的特性,混合使用時要處理全域性命名約定、命令、引數傳遞、資料型別轉換、出錯處理,以及兩種語言標準執行時的庫的混合等等一系列的問題。

我們需要了解一下extern "c",我們在閱讀程式時經常也會看到下面的**

#ifdef __cplusplus

extern "c"

#endif

__cplusplus是在c++中特有的,__cplusplus其實就是c++,extern "c"是由c++提供的乙個連線交換指定符號,目的是告訴c++這段**是c函式。請記住:extern "c"後面的函式不適用的c++的名字修飾,而是用c語言來修飾。

c 程式和 c++ 程式唯一的區別主要體現在函式名上: c語言使用的是簡單的引數名,不考慮引數的個數和型別,而c++中的函式總會將它的引數型別列表當作函式名的一部分。因此c++程式提供一些特殊的功能可以直接表明呼叫c函式。

c函式例項如下:

/*helloworld.c*/

#include void sayhello(char *str)

c++函式例項如下:

/*main.cpp*/

#include using namespace std;

extern "c" void sayhello(char *str);

int main(int argc, char *ar**)

在上述的**中,c++程式中它的宣告是extern "c", 那麼如何編譯檔案呢?可以使用下面的命令:

g++ -c main.cpp -o main.o

gcc -c helloworld.c helloworld.o

gcc main.o helloworld.o -lstdc++ -o main

使用的是gcc所以最後的鏈結過程中要指定c++庫,如果使用g++啟用鏈結,那麼就表示已經指定了c++的庫。

extern "c"是指定編譯和鏈結的規約,並不會影響語義。如果在標頭檔案中宣告函式,就要將整個標頭檔案都宣告為extern "c", 這是標準c++語法,展示如下:

extern "c" ;
在 c 程式中呼叫c++程式時,c++程式提供的函式可以使用c語言的呼叫順序。

在c++程式中建立c函式例項如下:

/*helloworld.cpp*/

#include using namespace std;

extern "c" void sayhello(char *str);

void sayhello(char *str)

c程式如下:

/*main.c*/

#include int main(int argc, char *ar**)

編譯使用的命令:

g++ -c hello.cpp -o hello.o

gcc -c main.c -o main.o

gcc hello.o main.o -lstdc++ -o main

在c++程式中函式sayhello()仍然是c++的**,我們可以在函式中隨意建立和清除物件。如果在函式sayhello()內部呼叫c函式,還必須表明呼叫的函式為extern "c",否則編譯程式會認定它為c++函式,並且改變相應的函式名。

c和c++對函式的處理方式是不同的,extern "c" 是使c++能夠呼叫c的庫檔案的乙個常用手段,在實際中還是經常用到的,如果要對編譯器使用c的方式來處理函式的話,那麼extern "c"就大有作為了。

C C 混合程式設計

c中呼叫c c 中呼叫c都會用到extern c 但兩者的意義卻大不一樣!例 c void foo int x c c code extern c void foo int x 讓c 聯結器能通過過類似於 foo來查詢此函式,而非類似於 foo int這樣的符號。使用extern c 則是告訴編譯器...

C C 混合程式設計

分類 linux c c 2012 12 26 09 51 655人閱讀收藏 舉報cc 混合程式設計 externc cplusplus 現在,我們就來慢慢的了解吧。一 extern c 的作用 最重點 1.extern c 的真實目的是實現類c和c 的混合程式設計。extern c 是由 提供的乙...

C C 混合程式設計

現在,我們就來慢慢的了解吧。一 extern c 的作用 最重點 1.extern c 的真實目的是實現類c和c 的混合程式設計。extern c 是由 提供的乙個連線交換指定符號,用於告訴 這段 是 函式。extern c 後面的函式不使用的c 的名字修飾,而是用c。這是因為c 編譯後庫中函式名會...