第一部分:c++呼叫c變數或函式
如果我想在c檔案中實現某些功能,在cpp檔案實現對這些功能的呼叫,我該如何做呢?
先將程式貼出來,然後在分析:
[cpp]view plain
copy
// file name : inct.h
#ifndef _inct_h_
#define _inct_h_
#define num 8
#ifdef __cplusplus
extern
"c"
#endif
#endif
[cpp]view plain
copy
//file name : inct.c
#include "inct.h"
#include
#include
int g_data[4][num]= \
,\
,\
,\
\ };\
int* func(int n)
[cpp]view plain
copy
// file name : test.cpp
#include
#include
#include
#include "inct.h"
#include
#include
using
namespace std;
int main(int argc, char **argv)
free(data);
return 0;
}
我將這樣編譯:
1、首先將inct.c編譯:
[cpp]view plain
copy
gcc -c -i. inct.c
此編譯將會輸出:inct.o
執行過程分析:gcc編譯時,並沒有預先定義__cplusplus這個巨集,所以extern "c"並沒有有效,inct.h被作為一般的c程式編譯成功。
2、將test.cpp用c++編譯器編譯:
[cpp]view plain
copy
g++ -c -i. test.cpp
輸出 test.o
g++中定義了__cplusplus,所以,test.cpp中對inct.h中所有功能引用都新增了extern 「c」,這樣一來,c++中的程式引用.h中的東西時,就將他們看成由c編譯器編譯成的程式了。編譯也沒有問題。
3、將所有編譯中間結果鏈結起來
[cpp]view plain
copy
g++ test.o inct.o -o test
第二部分:c中呼叫c++的函式或變數
先貼**:
inct.h的內容沒有改變。
將inct.c改為inct.cpp,並且修改下程式內容:
[cpp]view plain
copy
//file name : inct.c
#include "inct.h"
#include
using
namespace std; //使用std命名空間
int g_data[4][num]= \
,\
,\
,\
\ };\
int* func(int n)
將test.cpp修改為test.c,內容改變為:
[cpp]view plain
copy
// file name : test.c
#include "inct.h"
#include
#include //嫣然都是c的標頭檔案
int main(int argc, char **argv)
free(data); //將new來的資料free掉
return 0;
}
這樣編譯:
1、首先將inct.cpp編譯:
[cpp]view plain
copy
g++ -c -i. inct.cpp
此編譯將會輸出:inct.o
執行過程分析:g++編譯時,預先定義__cplusplus這個巨集,所以extern "c"有效,inct.h被作為一般的c++程式編譯成功,但是編譯後的變數和函式可以在c或c++程式中使用。
2、將test.c用c編譯器編譯:
[cpp]view plain
copy
gcc -c -i. test.c
輸出 test.o
gcc中沒定義__cplusplus,所以,test.c中對inct.h中所有功能引用都沒新增了extern 「c」,這樣一來,c語言程式正常引用這些函式或變數。
特別注意 extern "c"是c++中才有的,在c中只有extern,用在變數前,表示變數的宣告,不表示變數的定義。
3、將所有編譯中間結果鏈結起來
[cpp]view plain
copy
g++ test.o inct.o -o test
或者 [cpp]view plain
copy
gcc test.o inct.o -o test -lstdc++
來自:
混合呼叫服務
1.呼叫服務放在oncreat 中或把返回服務的內容放在conn中 2.既要保證服務長期後台執行,又要呼叫服務裡面的方法 3.混合呼叫的服務的生命週期 服務長期後台執行,又想呼叫服務的方法 1.start方式開啟服務 保證服務長期後台執行 2.bind方式繫結服務 保證呼叫服務的方法 3.unbin...
C和C 混合呼叫
extern c char strcpy char const char 注意它與下面的宣告的不同之處 extern char strcpy char const char 下面的這個宣告僅表示在連線的時候呼叫strcpy extern c 指令非常有用,因為c和c 的近親關係。注意 extern ...
C 與C變數或函式的混合呼叫
第一部分 c 呼叫c變數或函式 如果我想在c檔案中實現某些功能,在cpp檔案實現對這些功能的呼叫,我該如何做呢?先將程式貼出來,然後在分析 cpp view plain copy file name inct.h ifndef inct h define inct h define num 8 if...