C與C++混合編程

CC++混合編程的項目中,難免要相互調用對方的函數,如果不做特殊處理,就很容易出現編譯出錯的問題。

C中調用C++的函數,在C++文件中已實現的函數,通過#include包含的.h文件可以找到,但提示函數未定義(undefined)。這是什麼原因呢?

如我們定義了一個函數。如:

int func(int t)

{

//function

return 0;

}

C編譯器會將此函數編譯成類似_func的符號,C連接器只要找到了調用函數的符號,就認爲鏈接成功。而C++編譯器爲了實現函數的重載,會再編譯時帶上函數的信息,將上面的函數編譯成類似_func_int這樣的符號。所以在C函數中調用C++中調用的函數時,編譯器提示函數未定義。

我們只需要在C++文件和.h文件中,加入extern “c” {},告訴編譯器此C++文件依照C的方式來編譯封裝接口,函數實現還是依照C++語法和C++方式來編譯。如:

l func.c文件

#ifdef __cplusplus

extern “C” {

#endif

 

int func(int t)

{

//function

return 0;

}

 

#ifdef __cplusplus

}

#endif

l func.h文件

#ifdef __cplusplus

extern “C” {

#endif

 

#ifndef __FUNC_H__

#define __FUNC_H__

int func(int t);

#endif

 

#ifdef __cplusplus

}

#endif

其中__cplusplusC++編譯器的保留宏定義。extern “C” {}是高手C++編譯器{}裏面的函數按照C的編譯格式來編譯和鏈接。

這樣,就可以在C函數中調用C++函數,也可以在C++函數中調用C的函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章