在extern中编写c ++代码

时间:2015-02-13 04:35:14

标签: c++ c qt name-mangling

我正在尝试实现一个外部c ++标头接口,该接口将作为共享库生成。他们的示例界面具有包含在extern" C"中的c样式功能。因为他们不想要进行名称修改。

我目前的实施是依赖于qt的。我现在可以将这个qt代码放在extern" 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;
   }

 }
 }

谢谢!

1 个答案:

答案 0 :(得分:5)

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

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