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