我正试图在我的项目中使用C++头文件,但它出现了语法错误。我曾尝试将该项目转换为C++项目,但错误仍然存在。我不知道如何使用extern C
命令和#ifdef
。我的C++头文件是这样的:
#pragma once
#define _USE_MATH_DEFINES
#include <complex.h>
#include <math.h>
template <class NumberFormat, size_t DFT_Length>
class SlidingDFT
{
private:
///////////////rest of the code goes here/////
现在,如果我在Main.c
文件中包含这个文件并实例化一个对象,它会给出一个错误:syntax error
如有任何帮助,我们将不胜感激!提前Thanx。
问题是,C文件中包含的头文件中有C++代码(模板类(。C编译器不知道如何处理这个问题。
你可以也应该这样包装你的C++代码:
#ifdef __cplusplus
template <class NumberFormat, size_t DFT_Length>
class SlidingDFT
{
private:
///////////////rest of the code goes here/////
.
.
.
#endif
这将防止C编译器看到C++代码。
你提到的另一个问题是外部;C";函数的链接以及何时使用它。当您有需要从纯C代码调用的函数时,它们将需要有C链接。以下是一些需要了解的内容。
- 在.c模块中定义的函数将具有c链接
- 默认情况下,.cpp模块中定义的函数将具有C++链接,并且C代码无法(轻松(调用
- 您需要在C++模块中定义要从具有C链接的C调用的任何函数。.cpp和.h文件中都有必需的步骤
.cpp/.h文件中的C链接:
在.cpp文件中,定义如下函数:
extern "C" void myfunc()
{
//code
}
然后在.h文件中执行以下操作:
#ifdef _cplusplus
extern "C" {
#endif
void myfunc();
#ifdef _cplusplus
}
#endif
现在,你的.h文件可以包含在.c和.cpp模块中,函数myfunc((也可以在两者中调用。