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

时间:2014-06-05 12:18:08

标签: c++ c name-mangling

标题几乎说明了一切。我知道我可以使用和extern" C"阻止重整(虽然我不完全确定我应该把所谓的块放在哪里)但是有没有办法我可以为整个程序禁用它?如果我这样做,是否会使用代码编译的库更容易使用luajit' FFI?

编辑:这被认为是重复的问题是特定于DLL和Visual C ++编译器。我只是问一般的C ++问题。

1 个答案:

答案 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!
}