C和C 的混合編譯 extern 「C」的使用

2021-07-10 23:40:55 字數 1386 閱讀 1852

在實際程式設計中,有時會需要用到c\c++的混合編譯,通過extern 「c」即可實現混合編譯,以下是個人參照網友的資料以及自己的實際操作的收穫。

一:c++中呼叫c程式

中print函式通過extern 「c」來指明按照c的編譯方式來編譯,編譯完成執行結果如下:

二、在c中呼叫c++程式,分三個檔案進行

1、cppheader.h檔案

2、cppheader.cpp檔案

3.extern.c檔案,呼叫c++程式

4、編譯過程,編譯過程需要注意是c++按照c的編譯方式,所以最終生成的檔案是使用g++來進行編譯,makefile如下:

5、最終執行程式extern,執行結果如下

三、c\c++的編譯和鏈結

c++是乙個物件導向語言(雖不是純粹的物件導向語言),它支援函式的過載,過載這個特性給我們帶來了很大的便利。

為了支援函式過載的這個特性,c++編譯器實際上將voidprint(inti);編譯為:_print_int

這樣的函式名,來唯一標識每個函式。注:不同的編譯器實現可能不一樣,但是都是利用這種機制。所以當連線是呼叫print(3)時,它會去查詢_print_int(3)這樣的函式。正是因為這點,過載被認為不是多型,多型是執行時動態繫結(「一種介面多種實現」),如果硬要認為過載是多型,它頂多是編譯時「多型」。

c++中的變數,編譯也類似,如全域性變數可能編譯g_xx,類變數編譯為c_xx等。連線是也是按照這種機制去查詢相應的變數。

c語言中並沒有過載和類這些特性,故並不像c++那樣print(int i),會被編譯為_print_int,而是直接編譯為_print等。因此如果直接在c++中呼叫c的函式會失敗,因為連線是呼叫c中的print(3)時,它會去找_print_int(3)。因此extern "c"的作用就體現出來了。

c和c 混合編譯的問題(extern C )

1.引言 c 語言的建立初衷是 a better c 但是這並不意味著c 中類似c語言的全域性變數和函式所採用的編譯和連線方式與c語言完全相同。作為一種欲與c相容的語言,c 保留了一部分過程式語言的特點 被世人稱為 不徹底地物件導向 因而它可以定義不屬於任何類的全域性變數和函式。但是,c 畢竟是一種...

C和C 混合程式設計之 extern 「C」的使用

c 號稱是c語言的超集,也確實,從語言的基本語法上,c 是包含所有c語言的語法的,而且c 為了相容c,連c語言的標準庫也被納入到c 的標準庫中,比如在c 中我們仍然可以使用,它就是c 標準庫的一部分 注意最好用新的標準,而不是老的 但是,c 和c語言的編譯器在有些地方還是有差別的。比如,c 是支援物...

C 和 C 混合編譯簡述

一 extern c 的作用 最重點 1.extern c 的真實目的是實現類c和c 的混合程式設計。extern c 是由 提供的乙個連線交換指定符號,用於告訴 這段 是 函式。extern c 後面的函式不使用的c 的名字修飾,而是用c。這是因為c 編譯後庫中函式名會變得很長,與c生成的不一致,...