标题几乎说明了一切。我知道我可以使用和extern" C"阻止重整(虽然我不完全确定我应该把所谓的块放在哪里)但是有没有办法我可以为整个程序禁用它?如果我这样做,是否会使用代码编译的库更容易使用luajit' FFI?
编辑:这被认为是重复的问题是特定于DLL和Visual C ++编译器。我只是问一般的C ++问题。答案 0 :(得分:3)
正如您所提到的那样,使用extern "C" { }
语法来禁用名称修改以包围函数声明,您不会为
extern "C" {
int foo(int x, int y);
void bar(const char* cstr);
}
如果您确定不使用任何特定于c ++的功能,那么更简单的方法是使用c编译器来编译代码。对于例如GCC工具链调用gcc
而不是g++
。
<强>更新强>
extern
方法的优点是你仍然可以使用c ++特性来实现(在一个单独的.cpp
编译单元中),这在将代码编译为纯c代码时当然是不可能的。 E.g。
#include "MyExportAPI.h"
#include <string>
void bar(const char* cstr) {
std::string s(cstr); // <<< Note!
}