我想知道extern“C”是否是必须的?
答案 0 :(得分:8)
只有你想从C(或不同的C ++编译器,你应该像C一样对待)调用你的代码。
请参阅有关C ++常见问题的文章:http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html
答案 1 :(得分:1)
不,您使用extern "C"
为您的C ++函数提供C链接,因此它们不会像普通C ++函数那样“修饰”并允许从C(或Objective-C)调用它们)。
函数修饰用于实现C ++ function overloading功能,并为函数的每个变体提供不同的签名,同时允许开发人员使用他指定的名称。
只需不使用static
关键字即可自动导出您的C ++函数。但是,如果您在Windows DLL中实现了C ++函数,则必须使用declspec dllexport/dllimport
关键字在外部访问它们。
答案 2 :(得分:1)
使用extern "C"
关闭名称修改。如果你不这样做,你可能会为你的DLL客户端输入你的符号而努力。
请记住,不同的C ++编译器具有不同的名称修改规则,因此您的错位导出名称可能与导入时使用的名称不同。
但是,如果使用与DLL不同的编译器从DLL导入类是错误的,那么这是一个没有实际意义的点。
所以,如果你要导出类(反正通常是一个坏主意),那么更容易留下错误。否则,请使用extern "C"
将其关闭。