c++ - 在 extern c 中编写 C++ 代码

标签 c++ c qt name-mangling

我正在尝试实现一个将作为共享库生成的外部 C++ header 接口(interface)。他们的示例界面具有包装在 extern "C"中的 c 样式功能,因为他们不希望执行名称修改。

我当前的实现依赖于 qt。我现在可以将此 qt 代码放在外部“C”中并期望它开箱即用吗?如果这有效,为什么?

伪代码://不要指望它能工作并且可能包含错误。

extern "C"{

void doStuff(){

   QString filename="Data.txt";
   QFile file( filename );

  if ( file.open(QIODevice::ReadWrite) )
   {
     QTextStream stream( &file );
     std::stringstream ss;
     ss<<"something"<< endl;
   }

 }
 }

谢谢!

最佳答案

extern "C" 不会阻止您在函数内部使用 C++。它只影响调用函数的方式(包括函数的名称)。由于名称未被破坏,并且调用序列可能与标准 C++ 调用序列不同,因此您必须确保该函数在它所在的任何 C++ 翻译单元中声明为 extern "C"出现。此外,“C” 名称没有命名空间,但您可能知道这一点。

据我所知,Qt 没有做任何事情来使您的代码或多或少对 C 语言友好。

关于c++ - 在 extern c 中编写 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28492565/

相关文章:

c++ - 在运行时为 std::set 定义自定义比较器

c++ - C++中extern "C"有什么作用?

c - 使用 nl80211.h 扫描接入点

c++ - 对新对象使用相同的引用

c - 为什么C函数这么长?

c++ - execve() 的 envp arg 中的 LD_LIBRARY_PATH 被删除,即使调用 setuid parent prog 放弃了它的特权

c++ - 使用CMake构建Qt项目并从QMainWindow继承导致未引用的vtable错误

c++ - QT 5.7 MSVC 2015 静态构建不工作

c++ - 互斥体能否保护与特定指针相关的数据?

c++ - 选择模板参数不同的模板类构造器导致编译失败