gpt4 book ai didi

c++ - 在 cpp 项目 (VS2005) 中编译的 c 模块中无法识别内联关键字

转载 作者:搜寻专家 更新时间:2023-10-31 00:14:46 30 4
gpt4 key购买 nike

我正在 C90 兼容编译器中开发嵌入式 C 应用程序,另一方面,为了测试和调试目的,它部署在 Matlab/Simulink 中,将应用程序与 CPP 文件连接起来。这个包是用 Matlab MEX 编译的,它被配置为使用 Visual Studio 2005 来构建。

这意味着我们有一个 CPP 文件,以及几个一起构建的 .C/.H 文件。这个工作流对我来说很成功,在每个 C 调用上使用 #ifdef __cplusplus extern "C"{...} 技巧。

但是,由于嵌入式应用程序的时间限制而需要内联函数时,我遇到了一个问题。

接下来,在VS2005中构建SSCCE:

main.cpp

#include "c_method.h"

void main()
{
for(int b = 0; b < 9; b++)
int a = c_method(b);
}

c_method.c

#include "c_method.h"

inline int inline_fun(int x)
{
return x+1;
}

int c_method(int b)
{
return inline_fun(b);
}

c_method.h

#ifndef __C_METHOD_H__
#define __C_METHOD_H__

int c_method(int b);

#endif

它提供了以下错误:

c_method.c(7) : error C2054: expected '(' to follow 'inline'
c_method.c(8) : error C2085: 'inline_fun' : not in formal parameter list
c_method.c(8) : error C2143: syntax error : missing ';' before '{'

我注意到我错过了 extern "C"{...} 但也没有用。

如 SO 中所述,将 c_method.c 更改为 c_method.cpp 即可,但是我宁愿有一个替代解决方案(如果存在的话),因为我对嵌入式 C 编译器接受 cpp 扩展名而不向我提示...不是很有信心...

谢谢。

已添加

@πìντα ῥεῖ 得到了答案。创建一个空的内联声明就可以了。

但是,正如@Lundin 所建议的,我将考虑使用另一个 C 编译器构建 PC 平台的可能性。

最佳答案

Visual Studio 不支持 C 中的 inline 关键字,因为它没有实现 C99(它引入了该关键字)。

但是,它确实支持 Microsoft 特定的关键字 __inline在 C 和 C++ 中。为了使您的代码可移植,您可以这样做:

#include "c_method.h"

#ifdef _MSC_VER
#define inline __inline
#endif

inline int inline_fun(int x)
{
return x+1;
}

int c_method(int b)
{
return inline_fun(b);
}

当然,在实践中,您会将 inline 定义放入共享头文件中。

关于c++ - 在 cpp 项目 (VS2005) 中编译的 c 模块中无法识别内联关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21900905/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com