[英]Calling C functions within C++
我有一個中等長度的C文件,它帶有一堆函數(不是在頭文件下-只是一堆函數),我希望在我正在開發的C ++項目中收集和使用。
現在,我已經了解了extern
函數,但是我只看到它可以在.h文件下的小型C函數上運行。
但是我希望包括這些功能而不會弄亂C文件本身,因為我不太了解它們-我只需要“隱藏”功能。 有沒有簡單簡單的解決方案可以解決這個問題?
是的,您只需要一些在C ++代碼中可見的extern "C"
聲明:
extern "C" {
int my_C_function_1(void);
int my_C_function_2(void);
}
這可以放在合適的頭文件中,或者僅在一個特定的.cpp文件中使用,則可以將其放在此處。
請注意,如果您的C函數已經在某個位置的C標頭中聲明,則可以在.cpp文件中執行此操作:
extern "C" {
#include "my_C_header.h"
}
您需要制作一個C ++頭文件myheader.hh
。 它開始於
#ifndef MYHEADER_INCLUDED
#define MYHEADER_INCLUDED
extern "C" {
然后聲明所有公共C函數,類型,宏等。...最后,將其結尾
}; // end extern C
#endif MYHEADER_INCLUDED
在您的C ++程序中,添加#include "myheader.hh"
或者,(而不是使用myheader.hh
),您可以在C ++文件中添加(在其他包含之后,但在C ++代碼之前),例如
extern "C") {
#include "your-C-code.c"
};
(但是可能不起作用)。
您需要聲明這些函數(通常在頭文件中),以便從C ++調用它們。 如果使用C編譯器編譯這些函數,則確實需要用extern "C"
包圍聲明; 例如
extern "C" {
int foo(int, int);
}
如果您有源代碼,那么還可以對其進行修改以包括頭文件(不帶extern "C"
),並使用C ++編譯器編譯函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.