有時候我們得到乙個c++庫,但卻要在c語言中使用該庫中的函式,或者想編乙個在c語言下也容易使用的c++庫。
首先我們寫兩個檔案,分別是foo.cpp和main.c,
先看main.c
void
g(void
);int main()
只是簡單宣告了函式g(),再在main()中呼叫。
g() 在foo.cpp中定義
#include
<
iostream
>
using namespace std;
class
foo ;
foo::foo(
int i) : i(i) {}
void
foo::print()
extern "c
" }
定義了乙個類foo,在g()中例項化了乙個foo,使用print()方法列印一些資訊。
我們所要作的就是在g()函式外加上extern "c" ,這樣c++編譯器在編譯g()的時候會以c語言的方式來生成g()的內部名,這樣聯結器才能在c語言目標**中找到g()的引用。
在gcc下編譯:
gcc -c main
. cg++
-c foo
. cppg++
main
.o foo.o
在msvc中編譯
cl foo
.cpp main.c
上面foo.cpp中的g()宣告和定義是在一塊兒的,其實只要在函式宣告上加上extern "c"就行了,所以我們可以把宣告提取到乙個標頭檔案foo.h中去。
foo.h
#ifndef foo_h
#define foo_h
#ifdef __cplusplus
extern "c
" #endif
#endif
/*foo_h */
foo.cpp
#include "foo.h"
#include
<
iostream
>
using namespace std;
class
foo ;
foo::foo(
int i) : i(i) {}
void
foo::print()
void
g(void
) main.c
#include
"foo.h"
int main()
SQLITE的C語言介面
近我正在linux平台寫乙個軟體,需要用到乙個簡單的資料庫。mysql做資料庫固然很好,但其資料是存放在伺服器的。我想要的基本功能也就是使用c程式建立乙個資料庫本地檔案,然後可以對這個資料庫檔案執行基本的sql操作.就像在windows平台基於vc6.0的dao資料庫程式設計一樣 建立乙個本地檔案....
MySQL的C語言介面大全
2011 05 29 21 59 mysql在 c api 中可用的函式 mysql affected rows 返回被最新的update,delete或insert查詢影響的行數。mysql close 關閉乙個伺服器連線。mysql connect 連線乙個mysql伺服器。該函式不推薦 使用m...
C語言 佇列的介面實現
1.佇列的概念 佇列 只允許在一端進行插入資料操作,在另一端進行刪除資料操作的特殊線性表,佇列具有先進先出 fifo first in first out 入佇列 進行插入操作的一端稱為隊尾出佇列 進行刪除操作的一端稱為隊頭。2.佇列的實現 佇列也可以陣列和鍊錶的結構實現,使用鍊錶的結構實現更優一些...