假设我没有使用任何重载函数,有没有办法可以阻止所有名称重整?

标题基本概括了所有内容。 我知道我可以使用和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! }