namespace someNameSpace {
extern "C" void doSomething()
{
someOperations();
}
}
我想在 C++ 和 C 环境中运行 doSomething()
。
someNameSpace
是否仍在封装 doSomething()
如果我将其暴露给 extern "C"
链接?
有没有一种好方法可以在 C++ 和 C 之间共享函数,同时避免污染 C++ 端的全局命名空间?
编辑:因为此代码主要用于 C++ 模式,而 C 链接仅供测试使用,我想这是一种更好的方法。
namespace someNameSpace {
#ifdef COMPILE_FOR_C_LINKAGE
extern "C"
#else
extern "C++"
#endif
{
void doSomething()
{
someOperations();
}
}
}
原文由 user3528438 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的代码有效,但您应该注意所有具有
extern "C"
链接的函数共享相同的名称空间,但这不要与“命名空间”的 C++ 概念混淆:您的函数实际上是someNameSpace::doSomething
,但您不能在任何其他命名空间中拥有任何其他extern "C"
具有非限定名称的函数doSomething
。见 7.5/6:
贵公司或项目的全球风格仲裁者应该能够就适合您的代码库的命名策略向您提供建议。