我用乙個例子來告訴你怎麼樣在 c++ 裡使用c的標頭檔案/函式。比方說我有乙個c的標頭檔案叫 c.h, c的原始碼檔案叫 c.c,內容分別是
c.h:
#ifndef _asdfd_included_
#define _asdfd_included_
#include
extern int test(int a);
#endif
c.c:
#include "c.h"
int test(int a)
現在我想在c++中使用c.c中提供的函式test(),我的c++檔案名字叫 a.cpp,那麼裡面跟c有關的部分就要用 extern
"c" {} 大括號括起來,看看我的
a.cpp:
#include
using namespace std;
extern
"c"int main()
括起來了。
然後是如何編譯,先把c檔案編出目標檔案(.o)來
gcc -c c.c
你會看到生成了 c.o,其實,有目標檔案就夠了,如果你一定要做成(靜態/動態)庫檔案,也是可以的,不過我這裡就不深入了,做成庫和直接用目標檔案對解決你的問題沒有任何區別。
然後再編譯c++檔案,也就是我的 a.cpp
g++ -o hello a.cpp c.o
看到了吧,我在編譯 a.cpp 的時候把c生成的 c.o也加上了。 然後生成 可執行的 hello, 執行
./hello
就可以看到
a = 12
b = 144
關於建立靜態庫,假定你有3個c檔案, a.c, b.c, c.c 提供了你c++要用到的介面,那麼可以把這三個c檔案編譯出來的目標檔案放到乙個庫檔案裡供c++使用,方法為
先編譯出目標檔案
gcc -c a.c b.c c.c
這時候你應該看到有 a.o b.o c.o了
然後建立庫檔案
ar cr libtest.a a.o b.o c.o
這三個目標檔案就放入 libtest.a 這個靜態庫中了,然後編譯c++程式 (你的c++程式應該已經按照我前面說的用 extern "c" 把c的介面都括起來了),假定你的 libtest.a 放在 /home/aaa/lib下
g++ -o my.exe my.cpp -l/home/aaa/lib -ltest
就會生成可執行檔案 my.exe了。
algorithm標頭檔案裡的使用函式
非修改性序列操作 12個 迴圈 對序列中的每個元素執行某操作 for each 查詢在序列中找出某個值的第一次出現的位置 find 在序列中找出符合某謂詞的第乙個元素 find if 在序列中找出一子串行的最後一次出現的位置 find end 在序列中找出第一次出現指定值集中之值的位置 find f...
C 標頭檔案與C標頭檔案
include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料型別最值常量 include 定義本地化函式 include ...
C語言標頭檔案的使用
c語言的儲存類說明符有以下幾個,我來列表說明一下 說明符 用法auto 只在塊內變數宣告中被允許,表示變數具有本地生存期.extern 出現在頂層或塊的外部變數函式與變數宣告中,表示宣告的物件 具有靜態生存期,連線程式知道其名字.static 可以放在函式與變數宣告中.在函式定義時,其只用於指定函式...