簡體   English   中英

在C ++中調用C函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM